创建一个java project。
导入包:
创建Javabean,创建Javabean的实现接口,在接口里定义增删改查函数
写两个配置:
第一个是mybatis全局配置:
直接CV大法,配置的是数据源,以及注册接口配置xml
第二个是实现接口的方法。根据就是dao里的接口定义函数
public Employee getEmpById(Integer id);
public int updateEmployee(Employee employee);
public int deleteEmployee(Integer id);
public int insertEmployee(Employee employee);
一、实现第一个函数public Employee getEmpById(Integer id);
分析:这是一个查询操作,使用的是select标签,id就是函数名,查询的结果就是employee对象,但是这需要写全类名,使用#{}获取id的值
<select id="getEmpById" resultType="com.atshiyou.bean.Employee">
<!-- sql语句不让写分号 -->
select * from t_employee where id = #{id}
</select>
二、实现第二个函数public int updateEmployee(Employee employee);
分析:这是是一个更新数据库的函数,返回的结果是 影响了多少行,所以使用的是int接收返回值,但!!增删改都不需要写返回值类型!!
<update id="updateEmployee" >
update t_employee
set empname=#{empName}, gender=#{gender}, email=#{email}
where id =#{id}
</update>
三、四:删除表里的某个数据:delete from t_employee where id=#{id}
插入表中数据:
insert into t_employee(empname,gender,email) values (#{empName},#{gender},#{email})
<!-- public boolean deleteEmployee(Integer id); -->
<delete id="deleteEmployee">
delete from t_employee where id=#{id}
</delete>
<!-- public int insertEmployee(Employee employee); -->
<insert id="insertEmployee">
insert into t_employee(empname,gender,email) values (#{empName},#{gender},#{email})
</insert>
测试代码
一共有三步:
1、根据全局配置文件创建出一个SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
cv这些代码之后,需要使用 CTRL+SHIRT+O快捷键导入包
2、得到SQLsession对象,获取连接
SqlSession openSession = sqlSessionFactory.openSession();
3、获取到dao接口的实现(映射器)
为了符合生产实际,采用了关闭连接,节约资源
EmployeeDao dao = openSession.getMapper(EmployeeDao.class);
try {
Employee employee = dao.getEmpById(1);
System.out.println(employee);
} finally {
openSession.close();
}
然后因为不只一个测试,一共有四个测试,所以提取出公共的部分出来,作为一个函数。在测试的时候调用这个函数。但是Junit测试为我们提供了一个注解@Before,就是在标注了@test的函数,测试之前就要执行,。最终代码简化成:
public class mybatistest {
//工厂一个
SqlSessionFactory sqlSessionFactory;
@Before
public void initsqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 測試查詢
* @throws IOException
*/
@Test
public void test() throws IOException {
// 2、得到SQLsession对象,获取连接
SqlSession openSession = sqlSessionFactory.openSession();
// 3、获取到dao接口的实现(映射器)
EmployeeDao dao = openSession.getMapper(EmployeeDao.class);
try {
Employee employee = dao.getEmpById(1);
System.out.println(employee);
} finally {
openSession.close();
}
}
}
上面是测试的查询功能,没问题,接下来查询插入数据功能
需要在Employee文件中,写一个有参构造器和无参构造器,无参构造器在有参的基础上
由于个人技术太low,使用before注解不太熟练,所以,还是老老实实的写代码吧
@Test
public void testInsert() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeDao dao = openSession.getMapper(EmployeeDao.class);
int i = dao.insertEmployee(new Employee(null, "tomcat", "10953@qq.com", 1));
System.out.println(i);
} finally {
openSession.close();
}
}
所以还要在连接关闭之前,手动提交
查询数据库
还有另外一种方法: