Mybatis是一个非常轻量的ORM实例,成功完成了数据库的增删改查。
这里我们用Employee表:相应的字段和类型为:
创建实体类Employee:
package micro.model;
/**
@author:micro_hz
2015年8月19日
*/
public class Employee {
int id;
String name;
int age;
String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- 创建Dao接口,希望对数据库进行的操作定义:
package micro.inter;
import java.util.List;
import micro.model.Employee;
/**
@author:micro_hz
2015年8月19日
*/
public interface EmployeeDao {
//定义 CUID
//通过id查找
public void selectEmployeeById(int id);
//把所有对象放进列表
public List<Employee> selectEmployees();
//增加employee
public void addEmployee(Employee employee);
//删除employee
public void deleteEmployee(int id);
//改对应id的employee
public void updateEmployee(Employee employee);
}
- 建立数据库的配置文件Configuration.xml主要配置驱动和数据库,还有登录账号和使用的数据源mapper:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
//这里是类型引用,在mapper类型里会使用到alias这个别名
<typeAlias alias="Employee" type="micro.model.Employee" />
</typeAliases>
//数据库连接的配置
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/micro" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
//mapper文件的路径
<mappers>
<mapper resource="micro/mapper/employee.xml" />
</mappers>
</configuration>
- 创建mapper文件employee.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//接口的namespace
<mapper namespace="micro.inter.EmployeeDao">
//定义一个类型为Employee的List集合
<resultMap type="Employee" id="EmployeeList">
<result column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="address" property="address" />
</resultMap>
//sql语句定义
<select id="selectEmployeeById" parameterType="int" resultType="Employee">
select * from employee where #{id}
</select>
<select id="selectEmployees" resultMap="EmployeeList">
select * from employee
</select>
<insert id="addEmployee" parameterType="Employee">
insert into employee value(#{id},#{name},#{age},#{address})
</insert>
<update id="updateEmployee" parameterType="Employee">
update employee set name = #{name},age = #{age},address = #{address} where id = #{id}
</update>
<delete id="deleteEmployee" parameterType="int">
delete from employee where id = #{id}
</delete>
</mapper>
- service中直接使用接口实现增删改查:
package test;
import java.io.Reader;
import java.util.List;
import micro.inter.EmployeeDao;
import micro.model.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
@author:micro_hz
2015年8月19日
*/
public class Service {
/*
* 定义Session工厂
*/
public static SqlSessionFactory sqlSessionFactory;
public static Reader reader;
static
{
try
{
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
catch(Exception e)
{
e.printStackTrace();
}
}
//增加返回Session的函数
public static SqlSessionFactory getSqlSessionFactory()
{
return sqlSessionFactory;
}
/*
* 分别使用增删改查方法
*/
//增加记录
public static void addEmp(Employee e)
{
//获得Session
SqlSession session = sqlSessionFactory.openSession();
try
{
//获得映射
EmployeeDao employeeDao = session.getMapper(EmployeeDao.class);
employeeDao.addEmployee(e);
//增加删除改变需要提交事务
session.commit();
System.out.println("增加雇员id"+e.getId());
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
//关闭会话
session.close();
}
}
//删除记录
public static void deleteEm(int id)
{
SqlSession session = sqlSessionFactory.openSession();
try
{
EmployeeDao employeeDao = session.getMapper(EmployeeDao.class);
employeeDao.deleteEmployee(id);
session.commit();
System.out.println("删除雇员id" + id);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
session.close();
}
}
//改对应id的用户
public static void updateEm(Employee e)
{
SqlSession session = sqlSessionFactory.openSession();
try
{
EmployeeDao employeeDao = session.getMapper(EmployeeDao.class);
employeeDao.updateEmployee(e);
session.commit();
System.out.println("更新id为"+e.getId()+"的雇员信息");
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
session.close();
}
}
//返回Employee列表
public static List<Employee> getEmployees()
{
SqlSession session = sqlSessionFactory.openSession();
try
{
EmployeeDao employeeDao = session.getMapper(EmployeeDao.class);
List<Employee> list = employeeDao.selectEmployees();
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
session.close();
}
return null;
}
}
-编写测试类:
/*
* 添加10个Employee
*/
for (int i = 1; i <= 10; i++) {
Employee e = new Employee();
e.setId(i);
e.setName("micro" + String.valueOf(i));
e.setAge(i + 20);
e.setAddress("street"+String.valueOf(i+5));
Service.addEmp(e);
}
/*
* 删除id为10的Employee
*/
Service.deleteEm(10);
/*
* 改id为9的Employee
*/
Employee e = new Employee();
e.setId(9);
e.setName("xiaoma");
e.setAge(22);
e.setAddress("hangzhou");
Service.updateEm(e);
//获得所有Employee的列表
List<Employee> list = Service.getEmployees();
for(Employee e : list)
{
System.out.println("雇员的id为"+e.getId()+" 雇员的名字为"+e.getName()+"雇员的年龄"+e.getAge()+"雇员的地址"+e.getAddress());
}