使用MyBatis对表执行CRUD操作——基于XML的实现
1.创建(create)用户:在userMapper.xml文件中增加:
<!-- 创建用户Create --> <insert id="addUser" parameterType="com.fpc.Entity.User"> insert into users(name,age) values(#{name},#{age}) </insert>
在测试类测试:
String statement1 = "com.fpc.Mapping.userMapper.addUser"; User user1 = new User(); user1.setName("fpc"); user1.setAge(28); int retResult = session.insert(statement1,user1); session.commit(); session.close(); System.out.println(retResult);
执行的结果:
执行之前查询数据库中的值:
执行完,数据库users表中的数据为:
2.删除(delete)用户:在userMapper.xml文件中增加:
<!--删除用户 --> <delete id="deleteUser" parameterType="int"> delete from users where id=#{id} </delete>
单元测试类中测试:
String statement1 = "com.fpc.Mapping.usrMapper.deleteUser"; int retResult = session.delete(statement1,3); session.close(); System.out.println(retResult);
执行的结果,查询数据库,select * from users;得到的结果是:
可以看到id为3的记录已经被删除了。
3.更新(update)用户
在userMapper.xml中增加:
<!-- 更新用户 --> <update id="updateUser" parameterType="com.fpc.Entity.User"> update users set name=#{name},age=#{age} where id=#{id} </update>
测试类Test1中添加如下代码进行测试:
String statement1 = "com.fpc.Mapping.userMapper.updateUser"; User user = new User(); user.setId(1); user.setName("Michiel"); user.setAge(30); int retResult = session.delete(statement1,user); session.commit(); // *-session.close(); System.out.println(retResult); String statement2 = "com.fpc.Mapping.userMapper.getUser"; User user2 = (User) session.selectOne(statement2,1); System.out.println("Id: " +user2.getId() + " name : " + user2.getName() + " age: " + user2.getAge());
执行结果为:
使用Mybatis对表执行CRUD操作——基于注解的实现
package com.fpc.Mapping; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.fpc.Entity.User; public interface UserMapperI { //使用@Insert注解指明add方法要执行的SQL @Insert("insert into users(name,age) values(#{name},#{age})") public int add(User user); //使用@Delete注解指明deleteById方法要执行的SQL @Delete("delete from users where id=#{id}") public int deleteById(int id); //使用Update注解指明update方法要执行的SQL @Update("update users set name=#{name},age=#{age} where id=#{id}") public int update(User user); //使用Seletce注解指明getById方法要执行的SQL @Select("select * from users where id=#{id}") public User getById(int id); }
需要说明的是,我们不需要针对UserMapper接口去编写具体的实现类代码,这个具体的实现类由Mybatis帮我们动态构建出来,我们只需要直接拿来使用即可。
2.在conf.xml文件中注册这个映射接口
在con.xml中添加:
<!-- 注册UserMapper映射接口 --> <mapper class="com.fpc.Mapping.UserMapperI"></mapper>
特别注意:一开始用的jar包是mybatis-3.0.2.jar,但是运行项目是报错了,报错信息如下:
而lineNumber:23指的就是conf.xml中添加的接口配置文件。
经过了各种查找原因,都没效果。但是看到有篇文章提到mybatis 3.2版本以下是不支持注解的形式的。抱着试试看的态度,我将mybatis的jar包换成了mybatis-3.4.5.
然后再运行项目,不再报错。至于是不是必须得是3.2版本以上才支持注解的形式,这个不得而知,但3.0.3版本的mybatis是肯定不行的。
3.单元测试类代码:
创建用户:
UserMapperI mapper = session.getMapper(UserMapperI.class); User user = new User(); user.setName("userrrrrr"); user.setAge(25); int add = mapper.add(user); session.close(); System.out.println(add);
运行完的结果:
删除用户:
UserMapperI mapper = session.getMapper(UserMapperI.class); int delete = mapper.deleteById(4); session.close();
运行结果,id为4的用户被删除了:
更新用户:
UserMapperI mapper = session.getMapper(UserMapperI.class); User user = new User(); user.setId(1); user.setName("Lily"); user.setAge(24); int update = mapper.update(user);
运行结果: