记录自己在狂神说java中的学习情况,文章里有自己学习的理解和扩展,新手难免有理解偏差或者错误,恳请大佬指正。
Java自学 MyBatis CRUD
在Java MyBatis的基础上,进行CRUD的学习。
MyBatis的CRUD
1.1 namespace
在mapper.xml文件中的namespace的包名要和Dao/Mapper接口的包名一致!
即<mapper namespace="com.hj.dao.UserMapper">
对应com/hj/dap/UserMapper.xml
文件
关于这里的CRUD的具体详细内容可以查看: 官方文档。这里只简单挑选一些常用的字段和方法介绍。
1.2 select
选择查询语句。在<mapper>标签下使用<select>标签来使用。其中他的属性有:
- id:就是对应的namespace里包中的方法名
- resultType:Sql语句执行的返回值
- parameterType:参数类型
我们只需要在UserMapper接口里增加对应的抽象方法:
//根据ID查询用户
User getUserById(int id);
然后将对应的UserMapper.xml文件里建立对应的映射:
<select id="getUserById" parameterType="int" resultType="com.hj.pojo.User">
select * from mybatis.user where id=#{id};
</select>
然后就可以开始进行测试了!在测试文件UserMapperTest.java文件里添加如下方法:
@Test
public void getUserById() {
SqlSession sqlSession;
//获得SqlSession对象
sqlSession = MybatisUtils.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//那些实现的接口都在mapper对象里调用
User userById = mapper.getUserById(1);//如果该id对应的元素表里不存在则会返回null
System.out.println(userById);
sqlSession.close();
}
1.3 insert
插入语句。在<mapper>标签下使用<insert>标签来使用。其中他的属性有:
- id:就是对应的namespace里包中的方法名
- parameterType:参数类型
同样,我们只需要在UserMapper接口里增加对应的抽象方法:
//insert一个用户
boolean insertUser(User user);
然后将对应的UserMapper.xml文件里建立对应的映射:
<!--对象中的属性可以直接取出来,这里的user.id user.name user.pwd可以直接简化掉user.-->
<insert id="insertUser" parameterType="com.hj.pojo.User">
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
这里为了防止插入重复的id的数据,可以将此sql语句改变一下:
在MySQL中为了防止重复插入,可以使用如下语句:
insert ignore into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条数据时,MySQL数据库会首先检索已有数据(也就是id索引),如果存在,则忽略本次插入,如果不存在,则正常插入数据。
或者:
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd}) on duplicate key update name=#{name},pwd=#{pwd};
即插入数据时,如果数据存在,则执行更新操作,也是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(id索引),如果存在,则执行update更新操作,如果不存在,则直接插入。
或者:
replace into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
即插入数据时,如果数据存在,则删除再插入,前提条件同上。
然后就可以开始进行测试了!在测试文件UserMapperTest.java文件里添加如下方法:
//增删改要提交事务
@Test
public void insertUser() {
SqlSession sqlSession;
//获得SqlSession对象
sqlSession = MybatisUtils.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User addUser = new User(5, "吴六", "666");
//那些实现的接口都在mapper对象里调用
boolean flag = mapper.insertUser(addUser);
System.out.println(flag);
if(flag) System.out.println("插入成功");
//提交事务
sqlSession.commit();
sqlSession.close();
}
1.4 update
修改数据库中的记录。在<mapper>标签下使用<update>标签来使用。其中他的属性有:
- id:就是对应的namespace里包中的方法名
- parameterType:参数类型
同样,我们只需要在UserMapper接口里增加对应的抽象方法:
//修改用户
boolean updateUser(User user);
然后将对应的UserMapper.xml文件里建立对应的映射:
<update id="updateUser" parameterType="com.hj.pojo.User">
update mybatis.user set name = #{name},pwd=#{pwd} where id=#{id};
</update>
然后就可以开始进行测试了!在测试文件UserMapperTest.java文件里添加如下方法:
@Test
public void updateUser() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "赵七", "77777");
boolean flag = mapper.updateUser(user);
if (flag) {
System.out.println("修改成功");
}
sqlSession.commit();
sqlSession.close();
}
总结
步骤:
1.编写接口
2.编写对应mapper中的sql语句
3.测试(注意增删改需要提交事务)
本章代码
本章代码
中的mybatis-02部分