mybatis

Posted 走吧!走吧!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。

Mybatis入门      

MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

1、添加Mybatis的配置文件conf.xml

 

 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4     <environments default="development">
 5         <environment id="development">
 6             <transactionManager type="JDBC" />
 7             <!-- 配置数据库连接信息 -->
 8             <dataSource type="POOLED">
 9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
11                 <property name="username" value="root" />
12                 <property name="password" value="XDP" />
13             </dataSource>
14         </environment>
15     </environments>
16     
17 </configuration>

 

2 实体配置

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 4 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
 5  -->
 6 <mapper namespace="me.gacl.mapping.userMapper">
 7     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
 8     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
 9     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
10     User类就是users表所对应的实体类
11     -->
12     <!-- 
13         根据id查询得到一个user对象
14      -->
15     <select id="getUser" parameterType="int" 
16         resultType="me.gacl.domain.User">
17         select * from users where id=#{id}
18     </select>
19 </mapper

使用if+where实现多条件查询

 <select id="getStudentByIf" parameterType="stu" resultType="stu">
        select * from student
       <where>
           <if test="stuAge!=0">
           and stuAge>#{stuAge}
       </if>
             <if test="stuName!=null">
                 and stuName LIKE ‘%‘ #{stuName} ‘%‘
             </if>

       </where>

    </select>

choose  when 分类

<select id="getAllStudentByLike" parameterType="Map" resultType="stu">
        select * from student
        <where>
        <choose>
            <when test="stuName!=null">
                 stuName like CONCAT(‘%‘,#{stuName},‘%‘)
            </when>
            <when test="stuAge!=0">
                 stuAge> #{stuAge}
            </when>
<otherwise>
    1=1
</otherwise>


        </choose>
        </where>
    </select>

 c:使用foreach完成复杂 查询,有三种方式,

 第一种:传入的参数为数组类型

//传一组 xueshengID 
public List<student> getStudentBystuId_foreach_array(Integer[] ints);




映射文件配置
 <!--跟据学生id查询学生Interger-->
    <select id="getStudentBystuId_foreach_array" resultMap="studentList">
        select * from student
        <if test="array.length>0">
        where stuId IN
        /*数组形式传入学生Id*/
        <foreach collection="array" item="stu" open="(" separator="," close=")">
              #{stu}
        </foreach>
        </if>
    </select>

     第二种:传入list集合

 <!--跟据学生id查询学生list方式-->
    <select id="getStudentBystuId_foreach_list" resultMap="studentList">
        select * from student
        <if test="list.size>0">
            where stuId IN
        /*集合形式传入学生Id*/
        <foreach collection="list" item="stu" open="(" separator="," close=")">
            #{stu}
        </foreach>
        </if>
    </select>

 第三种:根据Map集合

 <!--跟据学生id查询学生map方式-->
    <select id="getStudentBystuId_foreach_map" resultMap="studentList">
        select * from student where stuId IN
        /*集合形式传入学生Id*/
        <foreach collection="stuId" item="stu" open="(" separator="," close=")">    <!--collection是自己定义的,就是map的key值-->
            #{stu}
        </foreach>
    </select>

 

以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段