提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
mybatis学习记录
02.增删改查
提示:以下是本篇文章正文内容,下面案例可供参考
一、增
1.增加一个用户信息测试方法:
@Test
public void tsetMyBatis() throws IOException {
/* 加载核心配置文件 */
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
/* 获取sqlSessionFactoryBuilder */
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
/* 获取sqlSessionFactory */
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
/*创建sqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交*/
SqlSession sqlSession = sqlSessionFactory.openSession(true);
/*获取mapper接口*/
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/* 测试功能 */
int result = mapper.insertUser();
System.out.println("result:" + result);
}
2.对应的UserMapper接口方法名:
public interface UserMapper {
int insertUser();
}
3.对应的UserMapper映射文件sql语句:
<?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">
<mapper namespace="study.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null, '张三','123',23,'男','13160228531')
</insert>
</mapper>
二、删
1.删除用户信息测试方法:
@Test
public void testDelete() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/*测试删除功能*/
int result = mapper.deleteUser();
System.out.println("result:" + result);
}
2.对应UserMapper接口方法名:
int deleteUser();
3.对应的UserMapper映射文件sql语句:
<!--int deleteUser();删-->
<delete id="deleteUser">
delete from t_user where id = 2
</delete>
三、改
1.更改用户信息测试方法:
@Test
public void tsetUpdate() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/* 测试修改功能 */
int result = mapper.updateUser();
System.out.println("result:" + result);
}
2.对应的UserMapper接口方法名:
int updateUser();
3.对应的UserMapper映射文件SQL语句:
<!--int updateUser();-->
<update id="updateUser">
update t_user set username='王二',password='123' where id = 11
</update>
四、查
1、查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
resultType:自动映射,用于实体类user属性名和表中字段名一致的情况
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
2、当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常
TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值
查询一个实体类
1.测试方法:
@Test
public void testGetUserById() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/*测试查询一个实体类对象功能*/
user result = mapper.getUserById();
System.out.println("result:" + result);
}
2.对应mapper接口:
user getUserById();
3.对应映射文件:
<!--user getUserById();-->
<select id="getUserById" resultType="study.projo.user">
select * from t_user where id = 11
</select>
查询集合
1.测试方法:
@Test
public void testGetUserList() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/*测试查询集合功能*/
List<user> result = mapper.getUserList();
/*lambda表达式*/
result.forEach(user -> System.out.println(user));
}
2.对应mapper接口:
List<user> getUserList();
3.对应映射文件:
<!--List<user> getUserList();-->
<select id="getUserList" resultType="user">
select * from t_user
</select>
总结
Mybatis面向接口编程的两个一致:
- 1.映射文件的namespace要与mapper接口的全类名保持一致
- 2.映射文件中SQL语句的id要与mapper接口中的方法名一致