11-19 程宗武

11-19 Mybatis02

1.Mybatis自动提交事务的设置

//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.创建 SqlSession 工厂对象
factory = builder.build(in);
//4.创建 SqlSession 对象
//这里openSession里面传入的参数是设置了自动提交事务,Mybatis默认是关闭了自动提交事务的
session = factory.openSession(true);
//5.创建 Dao 的代理对象
userDao = session.getMapper(IUserDao.class);

2. Mybatis 的动态 SQL 语句

2.1动态 SQL 之标签

2.1.1 if & where 标签

//根据用户信息查询
List<User> findByUser(User user);
//UserMapper.xml映射配置
<resultMap id="userMap" type="pojo.User">
    <id column="id" property="id"/>
    <result column="create_date" property="createDate"/>
    <result column="create_date" property="createDate"/>
</resultMap>
<select id="findByUser" resultMap="userMap" parameterType="user">
    select * from userinfo where 1=1  //这里是为了拼接sql语句
    <if test="username !=null and username != ''">
        and username like #{username}
    </if>
    <if test="name !=null and name != ''"> //这个if条件进不去,因为name判断为空
        and name like #{name}
    </if>
</select>
 //测试
@Test
public void findByUser() {
        User user = new User();
        user.setUsername("%a%");//这里没有设置name,所以第二个if判断条件进不去
        List<User> byUser = mapper.findByUser(user);
        sqlSession.commit();
        for (User u:
             byUser) {
            System.out.println(u);
        }
    }
//上面的xml中的select可以修改为
<select id="findByUser" resultMap="userMap" parameterType="user">
        select * from userinfo
        <where> //这里在执行第一个if语句时会省略and
            <if test="username !=null and username != ''">
                and username like #{username}
            </if>
            <if test="name !=null and name != ''">
                and name like #{name}
            </if>
        </where>
 </select>
 //这里的select编译过后会变成Preparing: select * from userinfo WHERE username like ? and name like ? 

2.1.2 foreach 标签

//删除多个用户信息
int deleteByIds(String... ids);
<delete id="deleteByIds" parameterType="List">//这里的parameterType参数不能设置为Array/array/Arrays
        delete from userinfo
        <where>
            <foreach collection="array" item="id" open="id in(" close=")
            " separator=",">
                #{id}
            </foreach>
            //这里如果遍历的是数组,collection的属性值设为array
            //如果遍历的是List,属性值设为list
            //如果为Map或者对象,属性值为对应的key
        </where>
</delete>
 //测试
@Test
    public void deleteByIds() {
        int i = mapper.deleteByIds("11", "12");
        sqlSession.commit();
        System.out.println(i);
    }
//这里的sql语句编译过后的结果为Preparing: delete from userinfo WHERE id in( ? , ? ) 
//Parameters: 11(String), 12(String)

2.1.3 trim标签

trim标签一般用于去除sql中的多余的关键字,以及对sql语句进行拼接等

属性 描述
prefix 给sql语句拼接的前缀
suffix 给sql语句拼接的后缀
prefixOverrides 如果sql前面有指定字符,去除sql语句前面的字符
suffixOverrides 如果sql后面有指定字符,去除sql语句后面的字符

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1