• Mybatis应用


    工具类MyBatisUtils

    在上一篇博客中 通过sqlsession 中 写了一个就简单的查询方法 并输出测试  我们发现 几乎所有的增删该查 都会调用 sqlsession 这样得到代码十分的冗余 所有在这里我们将这些公共的代码 都提到了一个公共的静态类既方便理解也方便后期的维护

     1 package cn.wh.util;
     2 
     3 import org.apache.ibatis.session.SqlSession;
     4 import org.apache.ibatis.session.SqlSessionFactory;
     5 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     6 
     7 import java.io.IOException;
     8 import java.io.InputStream;
     9 public class MybatisUtil {
    10         static String path="mybatis-config.xml";
    11         static InputStream is;
    12         static SqlSessionFactory factory;
    13     static {
    14         try {
    15             is = org.apache.ibatis.io.Resources.getResourceAsStream(path);
    16             factory=new  SqlSessionFactoryBuilder().build(is);
    17         } catch (IOException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21     public static SqlSession getSqlSession() {
    22         return factory.openSession();
    23     }
    24 }
    View Code

    下面我写一个简单的案例 来书写一下这个MyBatisUtils的使用(接口和小配置的XML文件这里就不展示了 只是展示一下MyBatisUtils的使用

    1  @Test //使用工具类 MybatisUtil
    2     public void  MybatisUtil(){
    3         SqlSession sqlSession = MybatisUtil.getSqlSession();
    4         User user= sqlSession.selectOne("SelectUser");
    5         System.out.println(user.getUname()+"=");
    6     }
    View Code

    这里我们仅仅用了三行代码就实现了这个查询 还是比较便于开发的

    getMapper()

    getMapper的作用,获取到接口,直接通过点的方式调用方法,以免直接手打的方式写错方法名,(强类型的方式)

       public  void  FirstList(){
            SqlSession sqlSession = MybatisUtil.getSqlSession();
            IUserDao mapper = sqlSession.getMapper(IUserDao.class);
            Map<String ,Object> map=new HashMap<String ,Object>() ;
            //Key千万一定要和实体类对应
            map.put("uname","1");
            map.put("upwd","1");
            List<User> users = mapper.conditionFirst(map);
            System.out.println(users.size());
        }

    在mybatis中 有一些智能标签 

    他分为 where ,if ,choose ,foreacharray方式 ,foreachlist方式 ,foreachlist自定义类型方式

    下面我书写两个例子

     1   <!--智能标签forearch 数组-->
     2     <select id="conditionByforearch" resultMap="MessageResult">
     3      SELECT * from user 
     4      <where>
     5          uid in
     6          <foreach collection="array" item="myid" open="(" close=")" separator=",">
     7           #{myid}
     8          </foreach>
     9      </where>
    10     </select>
    11     <!--智能标签forearch 集合-->
    12     <select id="conditionByforearchList" resultMap="MessageResult">
    13         SELECT * from user
    14         <where>
    15             uid in
    16             <foreach collection="list" item="myid" open="(" close=")" separator=",">
    17                 #{myid}
    18             </foreach>
    19         </where>
    20     </select>
    21     <!--智能标签forearch 自定义集合-->
    22     <select id="conditionByforearchListSecond" resultMap="MessageResult">
    23         SELECT * from user
    24         <where>
    25             uid in
    26             <foreach collection="list" item="user" open="(" close=")" separator=",">
    27                 #{user.uid}
    28             </foreach>
    29         </where>
    30     </select>
    View Code

    测试类

     1   @Test //智能标签 forearch 数组
     2     public  void  conditionByforearch(){
     3         SqlSession sqlSession = MybatisUtil.getSqlSession();
     4         IUserDao mapper = sqlSession.getMapper(IUserDao.class);
     5         int [] bookid={1,2};
     6         List<User> condition = mapper.conditionByforearch(bookid);
     7         for (User item:condition
     8              ) {
     9             System.out.println(item.getUname());
    10         }
    11     }
    12     @Test //智能标签 forearch 集合
    13     public  void  conditionByforearchList(){
    14         SqlSession sqlSession = MybatisUtil.getSqlSession();
    15         IUserDao mapper = sqlSession.getMapper(IUserDao.class);
    16      List<Integer> list=new ArrayList<>();
    17             list.add(1);
    18         List<User> condition = mapper.conditionByforearchList(list);
    19         for (User item:condition
    20                 ) {
    21             System.out.println(item.getUname());
    22         }
    23     }
    24     @Test //智能标签 forearch 集合自定义
    25     public  void  SecondconditionByforearchList(){
    26         SqlSession sqlSession = MybatisUtil.getSqlSession();
    27         IUserDao mapper = sqlSession.getMapper(IUserDao.class);
    28         List<User> list=new ArrayList<User>();
    29         User user=new User();
    30         user.setUid(1);
    31         list.add(user);
    32         User user1=new User();
    33         user1.setUid(2);
    34         list.add(user1);
    35         List<User> condition = mapper.conditionByforearchListSecond(list);
    36         for (User item:condition
    37              ) {
    38             System.out.println(item.getUname());
    39         }
    40 
    41     }
    View Code

    这些智能标签大大增加了我们的开发速度,从而也减少我们的代码数量

    多表关联查询(有一点难理解 整整弄了半天  )

    先看一下实体类吧

     1 package cn.wh.entity;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class UserType {
     7     private Integer typeid;
     8     private  String typeName;
     9     private  Integer uid;
    10 
    11     private List<User> users=new ArrayList<User>();
    12 
    13     public List<User> getUsers() {
    14         return users;
    15     }
    16 
    17     public void setUsers(List<User> users) {
    18         this.users = users;
    19     }
    20 
    21     public Integer getTypeid() {
    22         return typeid;
    23     }
    24 
    25     public void setTypeid(Integer typeid) {
    26         this.typeid = typeid;
    27     }
    28 
    29     public String getTypeName() {
    30         return typeName;
    31     }
    32 
    33     public void setTypeName(String typeName) {
    34         this.typeName = typeName;
    35     }
    36 
    37     public Integer getUid() {
    38         return uid;
    39     }
    40 
    41     public void setUid(Integer uid) {
    42         this.uid = uid;
    43     }
    44 }
    View Code

    一共两个实体类这是第二个

     1 package cn.wh.entity;
     2 
     3 public class User {
     4 
     5     // 用户id
     6     private int uid;
     7     // 用户名
     8     private String uname;
     9     //密码
    10     private  String upwd;
    11     //手机
    12     private  String phone;
    13 
    14     private  UserType  userType;
    15 
    16     public UserType getUserType() {
    17         return userType;
    18     }
    19 
    20     public void setUserType(UserType userType) {
    21         this.userType = userType;
    22     }
    23 
    24     public String getUpwd() {
    25         return upwd;
    26     }
    27 
    28     public void setUpwd(String upwd) {
    29         this.upwd = upwd;
    30     }
    31 
    32     public String getPhone() {
    33         return phone;
    34     }
    35 
    36     public void setPhone(String phone) {
    37         this.phone = phone;
    38     }
    39 
    40 
    41     public int getUid() {
    42         return uid;
    43     }
    44     public void setUid(int uid) {
    45         this.uid = uid;
    46     }
    47     public String getUname() {
    48         return uname;
    49     }
    50     public void setUname(String uname) {
    51         this.uname = uname;
    52     }
    53 }
    View Code

    第一套方式

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="cn.wh.dao.IUserType">
     6     <resultMap type="cn.wh.entity.UserType" id="UserType">
     7         <id column="typeid" jdbcType="INTEGER" property="typeid"/>
     8         <result column="typeName" jdbcType="VARCHAR" property="typeName" />
     9 
    10 
    11         <collection property="users" ofType="cn.wh.entity.User">
    12             <id column="uid" jdbcType="INTEGER" property="uid"/>
    13             <result column="uname" jdbcType="VARCHAR" property="uname" />
    14         </collection>
    15     </resultMap>
    16 
    17     <resultMap type="cn.wh.entity.UserType" id="UserType1">
    18         <id column="typeid" jdbcType="INTEGER" property="typeid"/>
    19         <result column="typeName" jdbcType="VARCHAR" property="typeName" />
    20         <collection property="users" ofType="cn.wh.entity.User" select="ss" column="typeid">
    21         </collection>
    22     </resultMap>
    23 <select id="listType" resultMap="UserType">
    24 select user.uid from usertype,user
    25 where user.typeid=usertype.typeid
    26 and user.uid='1'
    27 
    28 
    29 </select>
    30     <select id="UserTypecondition" resultMap="UserType1">
    31          SELECT typeid from  usertype
    32         where typeid='1'
    33     </select>
    34     <select id="ss" resultType="cn.wh.entity.User">
    35         SELECT * from user
    36         where typeid='1'
    37   </select>
    38 </mapper>
    View Code

    测试类

     1     @Test
     2  public  void  userTypeList(){
     3         SqlSession sqlSession = MybatisUtil.getSqlSession();
     4         IUserType mapper = sqlSession.getMapper(IUserType.class);
     5         UserType userType = mapper.listType();
     6         System.out.println(userType.getUsers().size());
     7     }
     8     //查询单一条 有条件 (一对多)
     9     @Test
    10     public  void  userTypeListcondition(){
    11         SqlSession sqlSession = MybatisUtil.getSqlSession();
    12         IUserType mapper = sqlSession.getMapper(IUserType.class);
    13         UserType userType = mapper.UserTypecondition(1);
    14         List<User> users = userType.getUsers();
    15         System.out.println(users);
    16         for (User item:users
    17              ) {
    18             System.out.println(item.getUpwd());
    19         }
    20 }
    View Code

    第二种方式

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="cn.wh.dao.IUser">
     6 
     7     <resultMap id="Users" type="cn.wh.entity.User">
     8         <id column="uid" jdbcType="INTEGER" property="uid"/>
     9         <result column="uname" jdbcType="VARCHAR" property="uname" />
    10         <association property="userType" javaType="cn.wh.entity.UserType">
    11             <id column="typeid" jdbcType="INTEGER" property="typeid"/>
    12             <result column="typeName" jdbcType="VARCHAR" property="typeName" />
    13         </association>
    14     </resultMap>
    15     <resultMap id="manyUsers" type="cn.wh.entity.User">
    16         <id column="uid" jdbcType="INTEGER" property="uid"/>
    17         <result column="uname" jdbcType="VARCHAR" property="uname" />
    18         <association property="userType" javaType="cn.wh.entity.UserType" column="uid" select="ss">
    19         </association>
    20     </resultMap>
    21 <!--多对一-->
    22     <select id="findeUser" resultMap="Users">
    23     SELECT * from user,usertype where user.typeid=usertype.typeid and user.uid=#{uid}
    24     </select>
    25     <!--多对多-->
    26     <select id="findempmany" resultMap="manyUsers">
    27           SELECT uid from user
    28         where typeid='1'
    29     </select>
    30     <select id="ss" resultType="cn.wh.entity.UserType">
    31          SELECT * from  usertype
    32         where typeid='1'
    33     </select>
    34 
    35 </mapper>
    View Code

    测试类

     1     //多对一
     2    @Test
     3     public  void manyTOne(){
     4         SqlSession sqlSession = MybatisUtil.getSqlSession();
     5         IUser mapper = sqlSession.getMapper(IUser.class);
     6         User user = mapper.findeUser(2);
     7 
     8         System.out.println(user.getUname()+"=");
     9     }
    10     //多对多
    11     @Test
    12     public  void manyTomany(){
    13         SqlSession sqlSession = MybatisUtil.getSqlSession();
    14         IUser mapper = sqlSession.getMapper(IUser.class);
    15         User user = mapper.findempmany(1);
    16         System.out.println(user.getUserType().getUid());
    17     }
    View Code
  • 相关阅读:
    关于为什么window.frames[0].src不能获取src
    div之间有间隙以及img和div之间有间隙的原因及解决方法
    面试题14:给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m]. * 请问k[0]*k[1]*...*k[m]可能的最大乘积是多少? * 例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.
    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37), 因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
    数据结构学习笔记:有序链表合并的函数
    输入一个字符串,求出该字符串包含的字符集合
    十六进制字符串转十进制
    十进制转二进制、八进制、十六进制的经典程序
    华为:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
    笔试题扑克牌排序
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/9266835.html
Copyright © 2020-2023  润新知