mybatis学习之标签和动态sql


<resultMap>标签的结构就是上一个随笔的结构。

mysql数据库中新建t_user表,结构如下:

id为自增的

User.java

 1 package com.itheima.po;
 2 
 3 public class User {
 4     
 5     
 6     private Integer id;
 7     private String name;
 8     private Integer age;
 9     
10     
11     @Override
12     public String toString() {
13         return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
14     }
15     
16     public Integer getId() {
17         return id;
18     }
19     public void setId(Integer id) {
20         this.id = id;
21     }
22     public String getName() {
23         return name;
24     }
25     public void setName(String name) {
26         this.name = name;
27     }
28     public Integer getAge() {
29         return age;
30     }
31     public void setAge(Integer age) {
32         this.age = age;
33     }
34     
35 
36     
37     
38 }

可以看到User类中的属性和数据库表列属性是不一样的,所以要用<resultMap>标签。

UserMapper.xml

 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  
 6 <mapper namespace="com.itheima.po.User">
 7     <resultMap type="com.itheima.po.User" id="resultMap">
 8         <id property="id" column="t_id"></id>
 9         <id property="name" column="t_name" />
10         <id property="age" column="t_age"/>
11     </resultMap>
12     <select id="findAllUser" resultMap="resultMap">
13         select * from t_user
14     </select>
15 </mapper>

type是你都pojo类,就是User类,id为唯一标识,用于select的引用,<id>中的property是User中的属性值,column是数据库对应的列。

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<!--配置环境,默认环境id为mysql  -->
 <environments default="mysql">
 <!--配置id为mysql的数据库环境  -->
 <environment id="mysql">
 <!--使用jdbc的事务管理  -->
 <transactionManager type="JDBC"/>
 <!--数据库连接池  -->
 <dataSource type="POOLED">
 <property name="driver" value="${jdbc.driver}"/>
 <property name="url" value="${jdbc.url}"/>
 <property name="username" value="${jdbc.username}"/>
 <property name="password" value="${jdbc.password}"/>
 </dataSource>
 </environment>
 </environments>
 <!--可以配置多个mapper  -->
 <mappers>
 <mapper resource="com/itheima/po/CustomerMapper.xml"/>
 <mapper resource="com/itheima/po/UserMapper.xml"/>
 </mappers>
</configuration>

MybatisTest.java

 1 package com.itheima.test;
 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.Test;
12 
13 import com.itheima.po.Customer;
14 import com.itheima.po.User;
15 import com.itheima.utils.MybatisUtils;
16 
17 //mybatis入门程序测试
18 
19 public class MybatisTest {
20     
21     
22     
23     @Test
24     public void findAllUser() {
25          SqlSession sqlSession=MybatisUtils.getSqlSession();
26         List<User> users= sqlSession.selectList("com.itheima.po.User.findAllUser");
27         for(User user:users) {
28             System.out.println(user);
29         }
30         sqlSession.close();
31     }
32 }

其他需要的MybatisUtils和两个properties文件上一个随笔都有。

动态sql项目结构:

对sql语句通过拼装,可以更高效实现数据库的操作。

Customer.java

 1 package com.itheima.po;
 2 
 3 public class Customer {
 4     private Integer id;
 5     private String username;
 6     private String jobs;
 7     private String phone;
 8     @Override
 9     public String toString() {
10         return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
11     }
12     
13     public Integer getId() {
14         return id;
15     }
16     public void setId(Integer id) {
17         this.id = id;
18     }
19     public String getUsername() {
20         return username;
21     }
22     public void setUsername(String username) {
23         this.username = username;
24     }
25     public String getJobs() {
26         return jobs;
27     }
28     public void setJobs(String jobs) {
29         this.jobs = jobs;
30     }
31     public String getPhone() {
32         return phone;
33     }
34     public void setPhone(String phone) {
35         this.phone = phone;
36     }
37     
38 }

MybatisUtils.java

 1 package com.itheima.utils;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.Reader;
 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 
12 public class MybatisUtils {
13     private static SqlSessionFactory sqlSessionFactory=null;
14     
15     //初始化sqlSessionFactory
16     static {
17         try {
18             Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
19             sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
20         } catch (IOException e) {
21             // TODO Auto-generated catch block
22             e.printStackTrace();
23         }
24     }
25     
26     
27     public static SqlSession getSqlSession() {
28         return sqlSessionFactory.openSession();
29         
30     }
31 }

MybatisTest.java

package com.itheima.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.itheima.po.Customer;
import com.itheima.utils.MybatisUtils;

//mybatis入门程序测试

public class MybatisTest {
    
    @Test 
    public void findCustomerByNameAndJobs() {
        SqlSession sqlsession=MybatisUtils.getSqlSession();
        Customer customer=new Customer();
        customer.setUsername("sam");
        customer.setJobs("doctor");
         List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByNameAndJobs", customer);
        for (Customer customer2 : customers) {
            System.out.println(customer2);
        }
        sqlsession.close();
    }
    
    @Test
    public void findCustomerByNameOrJobs() {
        SqlSession sqlsession=MybatisUtils.getSqlSession();
        Customer customer=new Customer();
        //customer.setUsername("sam");
        //customer.setJobs("doctor");
         List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByNameOrJobs", customer);
        for (Customer customer2 : customers) {
            System.out.println(customer2);
        }
        sqlsession.close();
    }
    @Test
    public void updateCustomer() {
        SqlSession sqlsession=MybatisUtils.getSqlSession();
        Customer customer=new Customer();
        customer.setId(1);
        customer.setUsername("DaMing");
        customer.setJobs("doctor");
        customer.setPhone("123456");
        int row=sqlsession.update("com.itheima.mapper.CustomerMapper.updateCustomer", customer);
        if(row>0) {
            System.out.println("更新成功");
        }else {
            System.out.println("更新失败");
        }
        sqlsession.commit();
        sqlsession.close();
    }
    //编号批量查询
    @Test
    public void findCustomerByIds() {
        SqlSession sqlsession=MybatisUtils.getSqlSession();
        List<Integer> integers=new ArrayList<Integer>();
        integers.add(1);
        integers.add(3);
        integers.add(5);
        List<Customer> customers= sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByIds", integers);
        for (Customer customer : customers) {
            System.out.println(customer);
        }
        sqlsession.close();
    }
    public void findCustomerByName() {
        SqlSession sqlsession=MybatisUtils.getSqlSession();
        Customer customer=new Customer();
        customer.setUsername("j");
        List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName",customer);
        for (Customer customer2 : customers) {
            System.out.println(customer2);
        }
        sqlsession.close();
    }
}

CustomerMapper.xml

 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  
 6  <!--namespace表示命名空间,唯一  -->
 7 <mapper namespace="com.itheima.mapper.CustomerMapper">
 8     <!-- if元素和where的使用 -->
 9     <select id="findCustomerByNameAndJobs" 
10     resultType="com.itheima.po.Customer" 
11     parameterType="com.itheima.po.Customer">
12         select * from t_customer 
13 <where>
14     <if test="username !=null and username !=''">
15         and username like concat('%',#{username},'%')
16     </if>
17     <if test="jobs !=null and jobs !=''">
18         and jobs=#{jobs}
19     </if>
20 </where>
21         
22     </select>
23     
24     <!--choose标签的使用 (以及when和otherwise) -->
25     <select id="findCustomerByNameOrJobs" resultType="com.itheima.po.Customer" parameterType="com.itheima.po.Customer">
26         select * from t_customer 
27         <trim prefix="where" prefixOverrides="and">
28             <choose>
29             <when test="username !=null and username !=''">
30             and username like concat('%',#{username},'%')
31             </when>
32             <when test="jobs !=null and jobs !=''">
33             and jobs=#{jobs}
34             </when>
35             <otherwise>
36             and phone is not null
37             </otherwise>
38         </choose>
39         </trim>
40     </select>
41     
42     <!--set标签的使用  -->
43     <update id="updateCustomer" parameterType="com.itheima.po.Customer">
44         update t_customer
45         <set>
46             <if test="username !=null and username !=''">
47                 username=#{username},
48             </if>
49             <if test="jobs !=null and jobs !=''">
50                 jobs=#{jobs},
51             </if>
52             <if test="phone !=null and jobs !=''">
53                 phone=#{phone},
54             </if>
55         </set>
56         where id=#{id}
57     </update>
58     <!--foreach标签的使用  -->
59     <select id="findCustomerByIds" parameterType="List" resultType="com.itheima.po.Customer">
60         select * from t_customer where id in
61         <foreach collection="list" item="id" 
62         index="index" open="(" separator="," close=")" >
63         #{id}
64         </foreach>
65     </select>
66     <!--blind标签  -->
67     <select id="findCustomerByName" parameterType="com.itheima.po.Customer"
68      resultType="com.itheima.po.Customer">
69          <bind name="pattern_username" value="'%'+_parameter.getUsername()+'%'"/>
70          select * from t_customer where username like #{pattern_username}
71      </select>
72     
73 </mapper>

mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <properties resource="db.properties"></properties>
 7 <!--配置环境,默认环境id为mysql  -->
 8  <environments default="mysql">
 9  <!--配置id为mysql的数据库环境  -->
10  <environment id="mysql">
11  <!--使用jdbc的事务管理  -->
12  <transactionManager type="JDBC"/>
13  <!--数据库连接池  -->
14  <dataSource type="POOLED">
15  <property name="driver" value="${jdbc.driver}"/>
16  <property name="url" value="${jdbc.url}"/>
17  <property name="username" value="${jdbc.username}"/>
18  <property name="password" value="${jdbc.password}"/>
19  </dataSource>
20  </environment>
21  </environments>
22  <!--可以配置多个mapper  -->
23  <mappers>
24  <mapper resource="com/itheima/mapper/CustomerMapper.xml"/>
25  </mappers>
26 </configuration>

两个properties资源文件也是和前面的博客相同。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM