zoukankan      html  css  js  c++  java
  • 3.mybatis实战教程(mybatis in action)之三:实现数据的增删改查

    转自:https://blog.csdn.net/tangruyi1992/article/details/52583910

    前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
    1. 用 mybatis 查询数据,包括列表
    2. 用 mybatis 增加数据
    3. 用 mybatis 更新数据.
    4. 用 mybatis 删除数据.

    查询数据,前面已经讲过简单的,主要看查询出列表的
    查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,

    需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的

    1 < !-- 为了返回list 类型而定义的returnMap -->
    2     <resultMap type="User" id="resultListUser">
    3         <id column="id" property="id" />
    4         <result column="userName" property="userName" />
    5         <result column="userAge" property="userAge" />
    6         <result column="userAddress" property="userAddress" />
    7     </resultMap>

    查询列表的语句在 User.xml 中

     
    1 < !-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
    2     <select id="selectUsers" parameterType="string" resultMap="resultListUser">
    3         select * from user where userName like #{userName}
    4     </select>

    在 IUserOperation 接口中增加方法:public List<User> selectUsers(String userName);    
    现在在 Test 类中做测试

     1 public void getUserList(String userName){
     2         SqlSession session = sqlSessionFactory.openSession();
     3         try {
     4             IUserOperation userOperation=session.getMapper(IUserOperation.class);          
     5             List<User> users = userOperation.selectUsers(userName);
     6             for(User user:users){
     7                 System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
     8             }
     9             
    10         } finally {
    11             session.close();
    12         }
    13     }

    现在在main  方法中可以测试:

     
    1 public static void main(String[] args) {
    2         Test testUser=new Test();
    3         testUser.getUserList("%");
    4     }

    可以看到,结果成功查询出来。如果是查询单个数据的话,用第二讲用过的方法就可以了。

    用mybatis 增加数据 
    在 IUserOperation 接口中增加方法:public void addUser(User user);
    在 User.xml 中配置

     1 < !--执行增加操作的SQL语句。id和parameterType  
     2        分别与IUserOperation接口中的addUser方法的名字和  
     3        参数类型一致。以#{name}的形式引用Student参数  
     4        的name属性,MyBatis将使用反射读取Student参数  
     5        的此属性。#{name}中name大小写敏感。引用其他  
     6        的gender等属性与此一致。seGeneratedKeys设置  
     7        为"true"表明要MyBatis获取由数据库自动生成的主  
     8        键;keyProperty="id"指定把获取到的主键值注入  
     9        到Student的id属性--> 
    10     <insert id="addUser" parameterType="User" 
    11         useGeneratedKeys="true" keyProperty="id"> 
    12         insert into user(userName,userAge,userAddress)  
    13              values(#{userName},#{userAge},#{userAddress})  
    14     </insert>

    然后在 Test 中写测试方法:

     1 /**
     2      * 测试增加,增加后,必须提交事务,否则不会写入到数据库.
     3      */
     4     public void addUser(){
     5         User user=new User();
     6         user.setUserAddress("人民广场");
     7         user.setUserName("飞鸟");
     8         user.setUserAge(80);
     9         SqlSession session = sqlSessionFactory.openSession();
    10         try {
    11             IUserOperation userOperation=session.getMapper(IUserOperation.class);
    12             userOperation.addUser(user);
    13             session.commit();
    14             System.out.println("当前增加的用户 id为:"+user.getId());
    15         } finally {
    16             session.close();
    17         }
    18     }

    用mybatis 更新数据
    方法类似,先在 IUserOperation 中增加方法:public void addUser(User user);
    然后配置 User.xml 

    1 <update id="updateUser" parameterType="User" >
    2         update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
    3     </update>

    Test 类总的测试方法如下:

     
     1 public void updateUser(){
     2         //先得到用户,然后修改,提交。
     3         SqlSession session = sqlSessionFactory.openSession();
     4         try {
     5             IUserOperation userOperation=session.getMapper(IUserOperation.class);
     6             User user = userOperation.selectUserByID(4);            
     7             user.setUserAddress("原来是魔都的浦东创新园区");
     8             userOperation.updateUser(user);
     9             session.commit();
    10             
    11         } finally {
    12             session.close();
    13         }
    14     }

    用mybatis 删除数据 
    同理,IUserOperation 增加方法:public void deleteUser(int id);
    配置User.xml

     
    1 <delete id="deleteUser" parameterType="int">
    2         delete from user where id=#{id}
    3     </delete>

    然后在Test类中写测试方法:

     
     1 /**
     2      * 删除数据,删除一定要 commit.
     3      * @param id
     4      */
     5     public void deleteUser(int id){
     6         SqlSession session = sqlSessionFactory.openSession();
     7         try {
     8             IUserOperation userOperation=session.getMapper(IUserOperation.class);          
     9             userOperation.deleteUser(id);
    10             session.commit();            
    11         } finally {
    12             session.close();
    13         }
    14     }

    这样,所有增删改查都完成了,注意在增加,更改,删除的时候要调用session.commit(),这样才会真正对数据库进行操作,否则是没有提交的。

    到此为止,简单的单表操作,应该都会了,接下来的时间了,我会讲多表联合查询,以及结果集的选取

     
  • 相关阅读:
    [Linux/wine.笔记]关于WINE(Linux上运行Windows程序的兼容层)
    [docker.笔记]常用命令
    [技巧.DotNet]超级好用的动态对象ExpandoObject
    .net core 的窗体设计器进展(.NET Core Windows Forms designer),5月中旬或将发布成熟版!
    [问题记录.Oracle/odp.net]托管ODP中,连接池的连接验证参数(validate connection=true)无效?
    [JWT]Json Web Token 备忘
    [MQ]RabbitMQ的概要介绍及消息路由规则
    常见排序算法
    C语言数值存储溢出探讨
    从计算理解数组
  • 原文地址:https://www.cnblogs.com/sharpest/p/5342008.html
Copyright © 2011-2022 走看看