MyBatis之对表执行CRUD操作——基于XML的实现

来源:互联网 发布:skyworth怎么连接网络 编辑:程序博客网 时间:2024/05/18 17:00

1、定义sql映射xml文件

  userMapper.xml文件的内容如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 4 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) 5  --> 6 <mapper namespace="me.gacl.mapping.userMapper"> 7     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 8     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 9     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回10     User类就是users表所对应的实体类11     -->12     <!-- 13         根据id查询得到一个user对象14      -->15     <select id="getUser" parameterType="int" 16         resultType="me.gacl.domain.User">17         select * from users where id=#{id}18     </select>19     20     <!-- 创建用户(Create) -->21     <insert id="addUser" parameterType="me.gacl.domain.User">22         insert into users(name,age) values(#{name},#{age})23     </insert>24     25     <!-- 删除用户(Remove) -->26     <delete id="deleteUser" parameterType="int">27         delete from users where id=#{id}28     </delete>29     30     <!-- 修改用户(Update) -->31     <update id="updateUser" parameterType="me.gacl.domain.User">32         update users set name=#{name},age=#{age} where id=#{id}33     </update>34     35     <!-- 查询全部用户-->36     <select id="getAllUsers" resultType="me.gacl.domain.User">37         select * from users38     </select>39     40 </mapper>
复制代码

  单元测试类代码如下:

复制代码
 1 package me.gacl.test; 2  3 import java.util.List; 4 import me.gacl.domain.User; 5 import me.gacl.util.MyBatisUtil; 6 import org.apache.ibatis.session.SqlSession; 7 import org.junit.Test; 8  9 public class TestCRUDByXmlMapper {10 11     @Test12     public void testAdd(){13         //SqlSession sqlSession = MyBatisUtil.getSqlSession(false);14         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);15         /**16          * 映射sql的标识字符串,17          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,18          * addUser是insert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL19          */20         String statement = "me.gacl.mapping.userMapper.addUser";//映射sql的标识字符串21         User user = new User();22         user.setName("用户孤傲苍狼");23         user.setAge(20);24         //执行插入操作25         int retResult = sqlSession.insert(statement,user);26         //手动提交事务27         //sqlSession.commit();28         //使用SqlSession执行完SQL之后需要关闭SqlSession29         sqlSession.close();30         System.out.println(retResult);31     }32     33     @Test34     public void testUpdate(){35         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);36         /**37          * 映射sql的标识字符串,38          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,39          * updateUser是update标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL40          */41         String statement = "me.gacl.mapping.userMapper.updateUser";//映射sql的标识字符串42         User user = new User();43         user.setId(3);44         user.setName("孤傲苍狼");45         user.setAge(25);46         //执行修改操作47         int retResult = sqlSession.update(statement,user);48         //使用SqlSession执行完SQL之后需要关闭SqlSession49         sqlSession.close();50         System.out.println(retResult);51     }52     53     @Test54     public void testDelete(){55         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);56         /**57          * 映射sql的标识字符串,58          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,59          * deleteUser是delete标签的id属性值,通过delete标签的id属性值就可以找到要执行的SQL60          */61         String statement = "me.gacl.mapping.userMapper.deleteUser";//映射sql的标识字符串62         //执行删除操作63         int retResult = sqlSession.delete(statement,5);64         //使用SqlSession执行完SQL之后需要关闭SqlSession65         sqlSession.close();66         System.out.println(retResult);67     }68     69     @Test70     public void testGetAll(){71         SqlSession sqlSession = MyBatisUtil.getSqlSession();72         /**73          * 映射sql的标识字符串,74          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,75          * getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL76          */77         String statement = "me.gacl.mapping.userMapper.getAllUsers";//映射sql的标识字符串78         //执行查询操作,将查询结果自动封装成List<User>返回79         List<User> lstUsers = sqlSession.selectList(statement);80         //使用SqlSession执行完SQL之后需要关闭SqlSession81         sqlSession.close();82         System.out.println(lstUsers);83     }84 }
复制代码

二、MyBatis对表执行CRUD操作——基于注解的实现

  1、定义sql映射的接口

  UserMapperI接口的代码如下:

复制代码
 1 package me.gacl.mapping; 2  3 import java.util.List; 4 import me.gacl.domain.User; 5 import org.apache.ibatis.annotations.Delete; 6 import org.apache.ibatis.annotations.Insert; 7 import org.apache.ibatis.annotations.Select; 8 import org.apache.ibatis.annotations.Update; 9 10 /**11  * @author gacl12  * 定义sql映射的接口,使用注解指明方法要执行的SQL13  */14 public interface UserMapperI {15 16     //使用@Insert注解指明add方法要执行的SQL17     @Insert("insert into users(name, age) values(#{name}, #{age})")18     public int add(User user);19     20     //使用@Delete注解指明deleteById方法要执行的SQL21     @Delete("delete from users where id=#{id}")22     public int deleteById(int id);23     24     //使用@Update注解指明update方法要执行的SQL25     @Update("update users set name=#{name},age=#{age} where id=#{id}")26     public int update(User user);27     28     //使用@Select注解指明getById方法要执行的SQL29     @Select("select * from users where id=#{id}")30     public User getById(int id);31     32     //使用@Select注解指明getAll方法要执行的SQL33     @Select("select * from users")34     public List<User> getAll();35 }
复制代码

  需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。

  2、在conf.xml文件中注册这个映射接口

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4     <environments default="development"> 5         <environment id="development"> 6             <transactionManager type="JDBC" /> 7             <!-- 配置数据库连接信息 --> 8             <dataSource type="POOLED"> 9                 <property name="driver" value="com.mysql.jdbc.Driver" />10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />11                 <property name="username" value="root" />12                 <property name="password" value="XDP" />13             </dataSource>14         </environment>15     </environments>16     17     <mappers>18         <!-- 注册userMapper.xml文件, 19         userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->20         <mapper resource="me/gacl/mapping/userMapper.xml"/>21         <!-- 注册UserMapper映射接口-->22         <mapper class="me.gacl.mapping.UserMapperI"/>23     </mappers>24     25 </configuration>
复制代码

  单元测试类的代码如下:

复制代码
 1 package me.gacl.test; 2  3 import java.util.List; 4 import me.gacl.domain.User; 5 import me.gacl.mapping.UserMapperI; 6 import me.gacl.util.MyBatisUtil; 7 import org.apache.ibatis.session.SqlSession; 8 import org.junit.Test; 9 10 public class TestCRUDByAnnotationMapper {11 12     @Test13     public void testAdd(){14         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);15         //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来16         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);17         User user = new User();18         user.setName("用户xdp");19         user.setAge(20);20         int add = mapper.add(user);21         //使用SqlSession执行完SQL之后需要关闭SqlSession22         sqlSession.close();23         System.out.println(add);24     }25     26     @Test27     public void testUpdate(){28         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);29         //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来30         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);31         User user = new User();32         user.setId(3);33         user.setName("孤傲苍狼_xdp");34         user.setAge(26);35         //执行修改操作36         int retResult = mapper.update(user);37         //使用SqlSession执行完SQL之后需要关闭SqlSession38         sqlSession.close();39         System.out.println(retResult);40     }41     42     @Test43     public void testDelete(){44         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);45         //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来46         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);47         //执行删除操作48         int retResult = mapper.deleteById(7);49         //使用SqlSession执行完SQL之后需要关闭SqlSession50         sqlSession.close();51         System.out.println(retResult);52     }53     54     @Test55     public void testGetUser(){56         SqlSession sqlSession = MyBatisUtil.getSqlSession();57         //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来58         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);59         //执行查询操作,将查询结果自动封装成User返回60         User user = mapper.getById(8);61         //使用SqlSession执行完SQL之后需要关闭SqlSession62         sqlSession.close();63         System.out.println(user);64     }65     66     @Test67     public void testGetAll(){68         SqlSession sqlSession = MyBatisUtil.getSqlSession();69         //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来70         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);71         //执行查询操作,将查询结果自动封装成List<User>返回72         List<User> lstUsers = mapper.getAll();73         //使用SqlSession执行完SQL之后需要关闭SqlSession74         sqlSession.close();75         System.out.println(lstUsers);76     }77 }
复制代码

  用到的MyBatisUtil工具类代码如下:

复制代码
 1 package me.gacl.util; 2  3 import java.io.InputStream; 4  5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8  9 public class MyBatisUtil {10 11     /**12      * 获取SqlSessionFactory13      * @return SqlSessionFactory14      */15     public static SqlSessionFactory getSqlSessionFactory() {16         String resource = "conf.xml";17         InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);18         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);19         return factory;20     }21     22     /**23      * 获取SqlSession24      * @return SqlSession25      */26     public static SqlSession getSqlSession() {27         return getSqlSessionFactory().openSession();28     }29     30     /**31      * 获取SqlSession32      * @param isAutoCommit 33      *         true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务34      *         false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务35      * @return SqlSession36      */37     public static SqlSession getSqlSession(boolean isAutoCommit) {38         return getSqlSessionFactory().openSession(isAutoCommit);39     }40 }
复制代码

   以上的相关代码是全部测试通过的,关于使用MyBatis对表执行CRUD操作的内容就这么多。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 牛仔裙子腰大了怎么办 天猫店铺降权怎么办 淘宝做文胸的标题要怎么办 秋衣弹力衣服松了怎么办 假离婚变成真的怎么办 百家利钱不到账怎么办 皮鞋撑大了怎么办变小 鞋穿着走路掉跟怎么办 浅口帆布鞋大了怎么办 布鞋后鞋跟老掉怎么办 穿坡跟凉鞋容易打滑摔倒怎么办 运动鞋烂了个口怎么办 运动鞋的网烂了怎么办 运动鞋鞋一个一个高一个低怎么办 淘宝预售水果不发货怎么办 淘宝评价忘记晒图了怎么办 参加水果展没有实物怎么办 没做过运营面试怎么办 苹果5s16g内存满了怎么办 618天猫有活动淘宝没有怎么办 天猫国际买到假货怎么办 天猫恶意差评怎么办 天猫删除差评被扣分了怎么办 天猫收到差评怎么办 天猫给差评骚扰怎么办 天猫客户差评怎么办 天猫没法给差评怎么办 天猫上限购一件怎么办 拍下商品不发货怎么办 天猫红包过期了怎么办 买天猫店被中介骗了钱怎么办 速卖通假货纠纷怎么办 天猫新开店被恶意拍下怎么办 新开的天猫店没有生意怎么办 银行的支票丢了怎么办 天猫积分用光了怎么办 淘宝店没有无线流量怎么办 京东卖家不发货怎么办会自动打款 一件代发顾客如果退款怎么办 京东以前的账号怎么办 旺旺对话框订单页面变宽了怎么办