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(),这样才会真正对数据库进行操作,否则是没有提交的。

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

     
  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/sharpest/p/5342008.html
Copyright © 2011-2022 走看看