zoukankan      html  css  js  c++  java
  • mybatis03

    1.mybaits的数据源

     Mybatis 将它自己的数据源分为三类:

    UNPOOLED     不使用连接池的数据源(想用就查询建)

    POOLED       使用连接池的数据源(常用,用的时候才池中取,完了放回)

    JNDI            使用 JNDI 实现的数据源 
    在这三种数据源中,我们一般采用的是 POOLED 数据源(很多时候我们所说的数据源就是为了更好的管理数据 库连接,也就是我们所说的连接池技术)

    2.事务控制

    默认不可开启自动提交事务   需要手动提交  session.commit(); 

    开启自动提交事务:session = factory.openSession(true); 

    设置为自动提交方式为 false再根据情况决定是否进行提交,这种方式更常用。因为我们可以根据业务 情况来决定提交是否进行提交。

    3.动态sql语句

     if where foreach

    1.需求:根据返回的id或者返回的name或者其他字段来查询对应的数据

     <select id="findByUser" resultType="user" parameterType="user"> 

    select * from user 

    <where>
    <if test="username!=null and username != '' ">//如果username不为空   username是user输入类型里面的某个字段

    and username like #{username}                       //sql加上这个

    </if>
    <if test="address != null">

    and address like #{address}

    </if>

    </where>

     </select> 

    2.需求

    <foreach>标签用于遍历集合,它的属性:  collection:代表要遍历的集合元素,注意编写时不要写#{}  open:代表语句的开始部分  close:代表结束部分 

    传入多个 id 查询用户信息,用下边 sql 实现:

    SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16) 

    这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。

    public class QueryVo implements Serializable {

    private List<Integer> ids;

    **set ()

    **get()

    }

    <!-- 查询所有用户在 id 的集合之中 -->  
    <select id="findInIds" resultType="user" parameterType="queryvo">
    <!-- select * from user where id in (1,2,3,4,5); --> <include refid="defaultSql"></include>
    <where> <if test="ids != null and ids.size() > 0">
    <foreach collection="ids" open="id in ( " close=")" item="uid" separator=",">
    #{uid}
    </foreach>
    </if>
    </where>
    </select>

     4.定义代码片段 

    <!-- 抽取重复的语句代码片段 --> 

    <sql id="defaultSql"> 

       select * from user 

    </sql> 

    <select id="findAll" resultType="user">

                   <include refid="defaultSql"></include>

    </select> 

     5.一对一查询

     1.直接在pojo上加字段  使用内连接查询对应的字段

     <!-- 配置查询所有操作--> 

    <select id="findAll" resultType="accountuser">   select a.*,u.username,u.address from account a,user u where a.uid =u.id;  </select> 

    2.在pojo中引入另一种张表的pojo 使用resultMap 配置

    <!-- 建立对应关系 -->

    <resultMap type="account" id="accountMap">

    <id column="aid" property="id"/>

    <result column="uid" property="uid"/>

    <result column="money" property="money"/>

    <!-- 它是用于指定从表方的引用实体属性的 -->

    <association property="user" javaType="user">

    <id column="id" property="id"/>

    <result column="username" property="username"/>

    <result column="sex" property="sex"/>

    <result column="birthday" property="birthday"/>

    <result column="address" property="address"/>

    </association>

    </resultMap>
    <select id="findAll" resultMap="accountMap">

    select u.*,a.id as aid,a.uid,a.money from account a,user u where a.uid =u.id;

    </select>

    6.一对多

    一样的在pojo在添加另一张表pojo的 List<> 类型   使用外连接  join on

    <resultMap type="user" id="userMap">

    <id column="id" property="id"></id>

    <result column="username" property="username"/>

    <result column="address" property="address"/>

    <result column="sex" property="sex"/>

    <result column="birthday" property="birthday"/>

    <!-- collection 是用于建立一对多中集合属性的对应关系 ofType 用于指定集合元素的数据类型 --> 

    <collection property="accounts" ofType="account">

    <id column="aid" property="id"/>

    <result column="uid" property="uid"/>

    <result column="money" property="money"/>

    </collection>

    </resultMap> 

    <!-- 配置查询所有操作 -->

    <select id="findAll" resultMap="userMap">

    select u.*,a.id as aid ,a.uid,a.money from user u left outer join account a on u.id =a.uid

    </select>

     7.多对多

     跟1对多一样的 操作  数据库sql不一样而已

  • 相关阅读:
    python day01学习
    标准化体系建设(下):如何建立基础架构标准化及服务化体系?
    用EL表达式与Java代码的共享数据
    String和StringBuilder的相互转化
    博客园的一个bug_修改文章标签
    int const *p和int *const的区别
    C++ assert()的用法
    java中,为什么char类型数组可以直接用数组名打印,而int型数组打印结果是地址值!
    传说中的栈溢出
    Trello
  • 原文地址:https://www.cnblogs.com/miwujun/p/12970040.html
Copyright © 2011-2022 走看看