• mybatis的CRUD实例(三)


      前面的文章我们已经实现了根据id查询用户信息的功能,下面我们进行其他业务功能的实现。

    一、根据用户名模糊查询用户列表

      查询使用的sql : select * from user where username like '%小明%'

    方法一:

      1.1.1 在UserMapper.xml映射文件中添加如下信息:

    1 <!--如果返回多个结果,mybatis会自动把返回的结果放在list容器中  -->
    2     <!--resultType的配置和返回一个结果的配置一样  -->
    3     <!--实现功能 :根据用户名模糊查询用户列表  -->
    4     <select id="findUserByUsername" parameterType="String" resultType="com.lwjnicole.pojo.User">
    5         select * from user where username like #{username}
    6     </select>

      1.2.1 在Test类中添加Junit测试方法:

     1 package mybatis_study;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 import org.junit.After;
    12 import org.junit.Before;
    13 
    14 import com.lwjnicole.pojo.User;
    15 
    16 public class Test {
    17     private SqlSessionFactory sqlSessionFactory = null;
    18     private SqlSession session = null;
    19     
    20     @Before
    21     public  void before(){
    22         //创建SqlSessionFactoryBuilder对象
    23         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    24         InputStream inputStream = null;
    25         try {
    26             //加载SqlMapConfig.xml配置文件
    27             inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    28         } catch (IOException e) {
    29             e.printStackTrace();
    30         }
    31         //创建SqlSessionFactory对象
    32         this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    33     }
    34     
    35     //根据用户名模糊查询用户列表
    36     @org.junit.Test
    37     public void findUserByUsername(){
    38         //创建SqlSession对象
    39         session = sqlSessionFactory.openSession();
    40         //使用SqlSession对象执行查询sql,获得结果(查询多条数据,使用selectList方法)
    41         List<User> userList  = session.selectList("findUserByUsername", "%小明%");
    42         //打印结果
    43         for (User user : userList) {
    44             System.out.println(user);
    45         }
    46     }
    47     
    48     @After
    49     public void after(){
    50         //释放资源
    51         session.close();
    52     }    
    53 }

      1.3.1 打印结果为:

    方法二:

      2.1.1 在UserMapper.xml映射文件中添加如下信息:

    1     <!--如果返回多个结果,mybatis会自动把返回的结果放在list容器中  -->
    2     <!--resultType的配置和返回一个结果的配置一样  -->
    3     <!--实现功能 :根据用户名模糊查询用户列表  -->
    4     <select id="findUserByUsername" parameterType="String" resultType="com.lwjnicole.pojo.User">
    5         select * from user where username like '%${value}%'
    6     </select>

      2.1.2 在Test类中添加Junit测试方法:

     1 package mybatis_study;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 import org.junit.After;
    12 import org.junit.Before;
    13 
    14 import com.lwjnicole.pojo.User;
    15 
    16 public class Test {
    17     private SqlSessionFactory sqlSessionFactory = null;
    18     private SqlSession session = null;
    19     
    20     @Before
    21     public  void before(){
    22         //创建SqlSessionFactoryBuilder对象
    23         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    24         InputStream inputStream = null;
    25         try {
    26             //加载SqlMapConfig.xml配置文件
    27             inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    28         } catch (IOException e) {
    29             e.printStackTrace();
    30         }
    31         //创建SqlSessionFactory对象
    32         this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    33     }
    34     
    35     //根据用户名模糊查询用户列表
    36     @org.junit.Test
    37     public void findUserByUsername(){
    38         //创建SqlSession对象
    39         session = sqlSessionFactory.openSession();
    40         //使用SqlSession对象执行查询sql,获得结果(查询多条数据,使用selectList方法)
    41         List<User> userList  = session.selectList("findUserByUsername", "小明");
    42         //打印结果
    43         for (User user : userList) {
    44             System.out.println(user);
    45         }
    46     }
    47     
    48     @After
    49     public void after(){
    50         //释放资源
    51         session.close();
    52     }
    53 }

      2.1.3 打印结果:

    二、总结

      2.1 #{}${} 的区别:

       #{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行java类型和jdbc类型转换。 #{} 可以有效的防止SQL注入。 #{} 可以接收简单类型值和 pojo 属性值。如果 parameterType 传输单个简单类型值,#{} 括号中可以填写 value 或者是 其他名称

      ${} 表示拼接SQL串,通过 ${} 可以将 parameterType 中传入的内容拼接在sql 中且 不进行jdbc类型转换,${} 可以接收简单类型值和 pojo 属性值,如果 parameterType 传输单个简单类型值,#{} 括号中只能填写 value

      2.2 parameterType 和 resultType 

    parameterType : 指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中;

    resultType :指定输出结果类型,mybatis 将sql 查询结果的一行记录数据映射为 resultType 中指定类型的对象。如果有多条数据,则分别进行映射,并把对象存放到 list 容器中。

      2.3 selectOne 方法 和 selectList 方法:

    selectOne 方法:查询一条记录,如果使用 selectOne 查询多条记录,则会抛出异常:

        org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

    selectList  方法:可以查询一条或者多条记录。

  • 相关阅读:
    【bzoj2882】工艺 后缀自动机+STL-map
    【bzoj3884】上帝与集合的正确用法 扩展欧拉定理
    【bzoj1475】方格取数 网络流最小割
    【bzoj4825】[Hnoi2017]单旋 线段树+STL-set
    【bzoj4448】[Scoi2015]情报传递 主席树
    【bzoj1803】Spoj1487 Query on a tree III DFS序+主席树
    【bzoj2127】happiness 网络流最小割
    【bzoj2431】[HAOI2009]逆序对数列 dp
    【bzoj4245】[ONTAK2015]OR-XOR 贪心
    【bzoj4066】简单题 KD-tree
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/8358713.html
Copyright © 2020-2023  润新知