Mybatis实现的对数据的增删查改

来源:互联网 发布:网络购物产业 编辑:程序博客网 时间:2024/06/05 17:33

[+]

mybatis实现的对数据的增删查改

前期准备

新建java工程或java wweb工程,
需要导入以下的包,


基本工作已经完成,接下来开始进入正题。

新建实体类

新建与数据库表对应的实体类
[java] view plain copy
 print?
  1. package com.edu.hpu.domain;  
  2.   
  3. /** 
  4.  * @author Administrator 
  5.  *user表所对应的实体类 
  6.  */  
  7. public class User {  
  8.       //实体类的属性和表的字段名称一一对应  
  9.       private int id;  
  10.       private String name;  
  11.       private int age;  
  12.      //对属性进行封装      
  13.     public int getId() {  
  14.         return id;  
  15.     }  
  16.     public void setId(int id) {  
  17.         this.id = id;  
  18.     }  
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.     public void setName(String name) {  
  23.         this.name = name;  
  24.     }  
  25.     public int getAge() {  
  26.         return age;  
  27.     }  
  28.     public void setAge(int age) {  
  29.         this.age = age;  
  30.     }  
  31.       //添加toString方法  
  32.       @Override  
  33.     public String toString() {  
  34.         return "User [id=" + id + ",name=" + name + ",age=" + age + "]";  
  35.     }  
  36. }  

添加Mybatis工具类

添加用到的工具类,如下所示,
[java] view plain copy
 print?
  1. package com.edu.hpu.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.      * 获取SqlSessionFactory 
  13.      * @return SqlSessionFactory 
  14.      */  
  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.      * 获取SqlSession 
  24.      * @return SqlSession 
  25.      */  
  26.     public static SqlSession getSqlSession() {  
  27.         return getSqlSessionFactory().openSession();  
  28.     }  
  29.       
  30.     /** 
  31.      * 获取SqlSession 
  32.      * @param isAutoCommit  
  33.      *         true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 
  34.      *         false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 
  35.      * @return SqlSession 
  36.      */  
  37.     public static SqlSession getSqlSession(boolean isAutoCommit) {  
  38.         return getSqlSessionFactory().openSession(isAutoCommit);  
  39.     }  
  40. }  

使用mybatis对数据进行增删查改操作有两种方法,分别为配置文件操作和注解操作。

通过配置文件进行操作

数据库配置文件如下所示,对数据库信息进行配置,
[html] view plain copy
 print?
  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/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />  
  11.                 <property name="username" value="root" />  
  12.                 <property name="password" value="admin" />  
  13.             </dataSource>  
  14.         </environment>  
  15.     </environments>  
  16.       <mappers>  
  17.         <!-- 注册userMapper.xml文件,   
  18.          userMapper.xml位于com.edu.hpu.mapping这个包下,所以resource写成com/edu/hpu/mapping/userMapper.xml-->  
  19.           <mapper resource="com/edu/hpu/mapping/userMapper.xml"/>   
  20.          <!-- <mapper class="com.edu.hpu.mapping.UserMapper_11"/> -->  
  21.      </mappers>  
  22. </configuration>  

配置操作数据库语句文件,如下所示,
[html] view plain copy
 print?
  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.   
  4. <mapper namespace="com.edu.hpu.mapping.userMapper">  
  5.     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复  
  6.     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型  
  7.     resultType="com.edu.hpu.domain.User"就表示将查询结果封装成一个User类的对象返回  
  8.     User类就是users表所对应的实体类  
  9.     -->  
  10.     <!--  
  11.         根据id查询得到一个user对象 
  12.      -->  
  13.     <select id="getUser" parameterType="int"   
  14.         resultType="com.edu.hpu.domain.User">  
  15.         select * from users where id=#{id}  
  16.     </select>  
  17. <!-- 创建用户(Create) -->  
  18.     <insert id="addUser" parameterType="com.edu.hpu.domain.User">  
  19.         insert into users(name,age) values(#{name},#{age})  
  20.     </insert>  
  21.       
  22.     <!-- 删除用户(Remove) -->  
  23.     <delete id="deleteUser" parameterType="int">  
  24.         delete from users where id=#{id}  
  25.     </delete>  
  26.       
  27.     <!-- 修改用户(Update) -->  
  28.     <update id="updateUser" parameterType="com.edu.hpu.domain.User">  
  29.         update users set name=#{name},age=#{age} where id=#{id}  
  30.     </update>  
  31.       
  32.     <!-- 查询全部用户-->  
  33.     <select id="getAllUsers" resultType="com.edu.hpu.domain.User">  
  34.         select * from users  
  35.     </select>  
  36.       
  37. </mapper>  
通过配置文件实现对数据库的增删查改基本上已经完成,接下来给出测试类,
可以进行测试,如下所示,
[java] view plain copy
 print?
  1. package com.edu.hpu.test;  
  2.   
  3. import java.util.List;  
  4. import com.edu.hpu.domain.User;  
  5. import com.edu.hpu.util.MyBatisUtil;  
  6. import org.junit.Test;  
  7. import org.apache.ibatis.session.SqlSession;  
  8.   
  9. public class Test2 {  
  10.   
  11.     @Test  
  12.     public void testAdd(){  
  13.         //SqlSession sqlSession = MyBatisUtil.getSqlSession(false);  
  14.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  15.         /** 
  16.          * 映射sql的标识字符串, 
  17.          * com.edu.hpu.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 
  18.          * addUser是insert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL 
  19.          */  
  20.         String statement = "com.edu.hpu.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之后需要关闭SqlSession  
  29.         sqlSession.close();  
  30.         System.out.println(retResult);  
  31.     }  
  32.       
  33.     @Test  
  34.     public void testUpdate(){  
  35.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  36.         /** 
  37.          * 映射sql的标识字符串, 
  38.          * com.edu.hpu.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 
  39.          * updateUser是update标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL 
  40.          */  
  41.         String statement = "com.edu.hpu.mapping.userMapper.updateUser";//映射sql的标识字符串  
  42.         User user = new User();  
  43.         user.setId(3);  
  44.         user.setName("hello world");  
  45.         user.setAge(25);  
  46.         //执行修改操作  
  47.         int retResult = sqlSession.update(statement,user);  
  48.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  49.         sqlSession.close();  
  50.         System.out.println(retResult);  
  51.     }  
  52.       
  53.     @Test  
  54.     public void testDelete(){  
  55.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  56.         /** 
  57.          * 映射sql的标识字符串, 
  58.          * com.edu.hpu.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 
  59.          * deleteUser是delete标签的id属性值,通过delete标签的id属性值就可以找到要执行的SQL 
  60.          */  
  61.         String statement = "com.edu.hpu.mapping.userMapper.deleteUser";//映射sql的标识字符串  
  62.         //执行删除操作  
  63.         int retResult = sqlSession.delete(statement,4);  
  64.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  65.         sqlSession.close();  
  66.         System.out.println(retResult);  
  67.     }  
  68.       
  69.     @Test  
  70.     public void testGetAll(){  
  71.         SqlSession sqlSession = MyBatisUtil.getSqlSession();  
  72.         /** 
  73.          * 映射sql的标识字符串, 
  74.          * com.edu.hpu.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 
  75.          * getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL 
  76.          */  
  77.         String statement = "com.edu.hpu.mapping.userMapper.getAllUsers";//映射sql的标识字符串  
  78.         //执行查询操作,将查询结果自动封装成List<User>返回  
  79.         List<User> lstUsers = sqlSession.selectList(statement);  
  80.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  81.         sqlSession.close();  
  82.         System.out.println(lstUsers);  
  83.     }  
  84. }  

通过注解进行操作

通过注解进行操作需要写一个接口,但是不必实现,如下所示,
[java] view plain copy
 print?
  1. package com.edu.hpu.mapping;  
  2.   
  3. import java.util.List;  
  4. import com.edu.hpu.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.  * @author gacl 
  11.  * 定义sql映射的接口,使用注解指明方法要执行的SQL 
  12.  */  
  13. public interface UserMapper_11 {  
  14.     //使用@Insert注解指明add方法要执行的SQL  
  15.     @Insert("insert into users(name, age) values(#{name}, #{age})")  
  16.     public int add(User user);  
  17.       
  18.     //使用@Delete注解指明deleteById方法要执行的SQL  
  19.     @Delete("delete from users where id=#{id}")  
  20.     public int deleteById(int id);  
  21.       
  22.     //使用@Update注解指明update方法要执行的SQL  
  23.     @Update("update users set name=#{name},age=#{age} where id=#{id}")  
  24.     public int update(User user);  
  25.       
  26.     //使用@Select注解指明getById方法要执行的SQL  
  27.     @Select("select * from users where id=#{id}")  
  28.     public User getById(int id);  
  29.       
  30.     //使用@Select注解指明getAll方法要执行的SQL  
  31.     @Select("select * from users")  
  32.     public List<User> getAll();  
  33. }  

同时,需要在数据库配置文件中添加所写的接口,在conf.xml中添加如下语句,
<mapper class="com.edu.hpu.mapping.UserMapper_11"/>,

OK,基本上已经完成,这里给出测试类可以进行测试,
[java] view plain copy
 print?
  1. package com.edu.hpu.test;  
  2.   
  3. import java.util.List;  
  4. import com.edu.hpu.domain.User;  
  5. import com.edu.hpu.mapping.UserMapper_11;  
  6. import com.edu.hpu.util.MyBatisUtil;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.junit.Test;  
  9.   
  10. /** 
  11.  * @author Administrator 
  12.  *对注解进行测试 
  13.  */  
  14. public class Test3 {  
  15.        
  16.     @Test  
  17.     public void testAdd(){  
  18.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  19.         //得到UserMapper接口的实现类对象,UserMapper接口的实现类对象由sqlSession.getMapper(UserMapper.class)动态构建出来  
  20.         UserMapper_11 mapper = sqlSession.getMapper(UserMapper_11.class);  
  21.         User user = new User();  
  22.         user.setName("大智若愚");  
  23.         user.setAge(20);  
  24.         int add = mapper.add(user);  
  25.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  26.         sqlSession.close();  
  27.         System.out.println(add);  
  28.     }  
  29.       
  30.     @Test  
  31.     public void testUpdate(){  
  32.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  33.         //得到UserMapper接口的实现类对象,UserMapper接口的实现类对象由sqlSession.getMapper(UserMapper.class)动态构建出来  
  34.         UserMapper_11 mapper = sqlSession.getMapper(UserMapper_11.class);  
  35.         User user = new User();  
  36.         user.setId(3);  
  37.         user.setName("大音希声");  
  38.         user.setAge(26);  
  39.         //执行修改操作  
  40.         int retResult = mapper.update(user);  
  41.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  42.         sqlSession.close();  
  43.         System.out.println(retResult);  
  44.     }  
  45.       
  46.     @Test  
  47.     public void testDelete(){  
  48.         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);  
  49.         //得到UserMapper接口的实现类对象,UserMapper接口的实现类对象由sqlSession.getMapper(UserMapper.class)动态构建出来  
  50.         UserMapper_11 mapper = sqlSession.getMapper(UserMapper_11.class);  
  51.         //执行删除操作  
  52.         int retResult = mapper.deleteById(7);  
  53.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  54.         sqlSession.close();  
  55.         System.out.println(retResult);  
  56.     }  
  57.       
  58.     @Test  
  59.     public void testGetUser(){  
  60.         SqlSession sqlSession = MyBatisUtil.getSqlSession();  
  61.         //得到UserMapper接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapper.class)动态构建出来  
  62.         UserMapper_11 mapper = sqlSession.getMapper(UserMapper_11.class);  
  63.         //执行查询操作,将查询结果自动封装成User返回  
  64.         User user = mapper.getById(1);  
  65.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  66.         sqlSession.close();  
  67.         System.out.println(user);  
  68.     }  
  69.       
  70.     @Test  
  71.     public void testGetAll(){  
  72.         SqlSession sqlSession = MyBatisUtil.getSqlSession();  
  73.         //得到UserMapper接口的实现类对象,UserMapper接口的实现类对象由sqlSession.getMapper(UserMapper.class)动态构建出来  
  74.         UserMapper_11 mapper = sqlSession.getMapper(UserMapper_11.class);  
  75.         //执行查询操作,将查询结果自动封装成List<User>返回  
  76.         List<User> lstUsers = mapper.getAll();  
  77.         //使用SqlSession执行完SQL之后需要关闭SqlSession  
  78.         sqlSession.close();  
  79.         System.out.println(lstUsers);  
  80.     }  
  81. }  


在Spring MVC + Mybatis中的使用方式

使用Mapper方法如下所示:
首先,新建一个接口类,将所要使用的方法写出来但不实现,如下
[java] view plain copy
 print?
  1. public interface InstallStationInfoMapper {  
  2.   
  3.     int insertSelective(InstallStationInfo record);  
  4.   
  5.     InstallStationInfo selectByPrimaryKey(Long id);  
  6.       
  7.     public List<InstallStationInfo> selectBySelective(Map<String, Object> map);  
  8.       
  9.     int updateByPrimaryKeySelective(InstallStationInfo record);  
  10.   
  11. }  

然后在配置文件mapper.xml中对接口中的方法进行实现,注意mapper.xml中的实现的方法要与mapper接口类中的方法名一一对应,如下:

[html] view plain copy
 print?
  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="com.elushunfeng.mapper.InstallStationInfoMapper" >  
  4.   
  5.   <resultMap id="BaseResultMap" type="com.elushunfeng.model.InstallStationInfo" >  
  6.     <id column="id" property="id" jdbcType="BIGINT" />  
  7.     <result column="station_name" property="stationName" jdbcType="VARCHAR" />  
  8.     <result column="is_valid" property="isValid" jdbcType="INTEGER" />  
  9.   </resultMap>  
  10.     
  11.   <sql id="Base_Column_List" >  
  12.     id, station_name,is_valid  
  13.   </sql>  
  14.     
  15.   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >  
  16.     select   
  17.     <include refid="Base_Column_List" />  
  18.     from install_station_info  
  19.     where id = #{id,jdbcType=BIGINT} and is_valid = 1  
  20.   </select>  
  21.   <select id="selectBySelective" resultMap="BaseResultMap" parameterType="map" >  
  22.     select   
  23.     <include refid="Base_Column_List" />  
  24.     from install_station_info  
  25.     where is_valid = 1  
  26.   </select>  
  27.   <insert id="insertSelective" parameterType="com.elushunfeng.model.InstallStationInfo" >  
  28.     insert into install_station_info  
  29.     <trim prefix="(" suffix=")" suffixOverrides="," >  
  30.        <if test="id != null" >  
  31.         id,  
  32.       </if>   
  33.       <if test="stationName != null" >  
  34.         station_name,  
  35.       </if>  
  36.       <if test="isValid != null" >  
  37.         is_valid,  
  38.       </if>  
  39.     </trim>  
  40.     <trim prefix="values (" suffix=")" suffixOverrides="," >  
  41.       <if test="id != null" >  
  42.         #{id,jdbcType=BIGINT},  
  43.       </if>   
  44.       <if test="stationName != null" >  
  45.         #{stationName,jdbcType=VARCHAR},  
  46.       </if>  
  47.       <if test="isValid != null" >  
  48.         #{isValid,jdbcType=INTEGER},  
  49.       </if>  
  50.     </trim>  
  51.   </insert>  
  52.     
  53.   <update id="updateByPrimaryKeySelective" parameterType="com.elushunfeng.model.InstallStationInfo" >  
  54.     update install_station_info  
  55.     <set >  
  56.       <if test="stationName != null" >  
  57.         station_name = #{stationName,jdbcType=VARCHAR},  
  58.       </if>  
  59.       <if test="isValid != null" >  
  60.         is_valid = #{isValid,jdbcType=INTEGER},  
  61.       </if>  
  62.     </set>  
  63.     where id = #{id,jdbcType=BIGINT}  
  64.   </update>  
  65. </mapper>  
本博客转载自:http://blog.csdn.net/wojiaohuangyu/article/details/52022210