ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MyBatis(2)

2022-01-08 19:04:41  阅读:173  来源: 互联网

标签:city gender member members SQL MyBatis log4j


1.动态SQL

根据用户的条件动态创建SQL

2.动态SQL使用案例

2.1 创建实体类

2.1.1 Member
public class Member {
    private int memberId;
    private String memberNick;
    private String memberGender;
    private int memberAge;
    private String memberCity;
}
2.1.2 MemberSearchCondition
public class MemberSearchCondition {
    private String gender;
    private Integer minAge;
    private Integer maxAge;
    private String city;
}

2.2 创建MemberDAO

public interface MemberDAO {
    //1.在多条件查询中,如果查询条件不确定,可以直接使用HashMap作为参数
   //缺点是要手动维护key的一致性
   // public abstract List<Member> searchMember(HashMap<String, Object> params);
   //2.还可以创建查询条件类 MemberSearchCondition
    public  List<Member> searchMember(MemberSearchCondition memberSearchCondition);
}

2.3 创建MemberMapper

动态SQL语句

&gt;大于
&lt;小于
<where></where>标签

<mapper namespace="com.lxr.dao.MemberDAO">
    <resultMap id="memberMap" type="Member">
        <id column="member_id" property="memberId" />
        <result column="member_nick" property="memberNick" />
        <result column="member_gender" property="memberGender" />
        <result column="member_age" property="memberAge" />
        <result column="member_city" property="memberCity" />
    </resultMap>
<select id="searchMember" resultMap="memberMap">
        select member_id,member_nick,member_gender,member_age,member_city
        from members
        <where>
            <if test="gender != null">
                and member_gender = #{gender}
            </if>
            <if test="minAge != null">
                and member_age &gt;= #{minAge}           <!--&gt;大于-->
            </if>
            <if test="maxAge != null">
                and member_age &lt;= #{maxAge}          <!--&lt;小于-->
            </if>
            <if test="city != null">
                and member_city = #{city}
            </if>
        </where>
</select>

2.4 测试动态SQL查询

2.4.1 where
public void searchMember() {
        HashMap<String,Object> params = new HashMap<String,Object>();

//        params.put("gender","女");
//        params.put("minAge",null);
//        params.put("MaxAge",null);
//        params.put("city",null);
//
//        MemberDAO memberDAO = MyBatisUtil.getMapper(MemberDAO.class);
//        List<Member> members = memberDAO.searchMember(params);
//
//        System.out.println(members);

        MemberSearchCondition params1 = new MemberSearchCondition();
        params1.setGender("女");
//        params1.setMinAge(20);
//        params1.setMaxAge(22);
//        params1.setCity("武汉");
        MemberDAO memberDAO = MyBatisUtil.getMapper(MemberDAO.class);
        List<Member> members = memberDAO.searchMember(params1);

        for(Member i:members){
            System.out.println(i);
        }
    }

2.4.2 trim

<mapper namespace="com.lxr.dao.MemberDAO">
        <resultMap id="memberMap" type="Member">
            <id column="member_id" property="memberId" />
            <result column="member_nick" property="memberNick" />
            <result column="member_gender" property="memberGender" />
            <result column="member_age" property="memberAge" />
            <result column="member_city" property="memberCity" />
        </resultMap>
    <select id="searchMember" resultMap="memberMap">
            select member_id,member_nick,member_gender,member_age,member_city
            from members
            <trim prefix="where" prefixOverrides="and | or" suffix="order by member_age">
                <if test="gender != null">
                    and member_gender = #{gender}
                </if>
                <if test="minAge != null">
                    and member_age &gt;= #{minAge}           <!--&gt;大于-->
                </if>
                <if test="maxAge != null">
                    and member_age &lt;= #{maxAge}          <!--&lt;小于-->
                </if>
                <if test="city != null">
                    and member_city = #{city}
                </if>
            </trim>
        </select>
</mapper>

2.4.3 foreach

按城市条件查询

select member_id,member_nick,member_gender,member_age,member_city
from members
where memberIcity in
<foreach collection="list" item="cityName" separator="," open="(" close=")">
      #{cityName}
</foreach>

2.模糊查询

${key} 表示获取参数,先获取参数的值,拼接到SQL语句中,再编译执行SQL语句
#{key} 表示获取参数,先完成SQL语句的编译,预编译之后再将获取的参数设置到SQL语句中 可以避免SQL注入问题

2.1 定义查询方法

 public List<Member> searchMemberByNick(@Param("keyword") String keyword);

2.2 定义SQL语句

like 
1.  '%'  任意字符 
2.  '_'  任意一个字符
如果参数是String类型,需要使用 parameterType 声明参数类型
<select id="searchMemberByNick" parameterType="java.lang.String" resultMap="memberMap">
        select member_id,member_nick,member_gender,member_age,member_city
        from members
        where member_nick like '%${keyword}%'
</select>

2.3 测试

public void searchMemberByNick() {
        MemberDAO memberDAO = MyBatisUtil.getMapper(MemberDAO.class);
        List<Member> members = memberDAO.searchMemberByNick("花");
        System.out.println(members);
    }

3.MaBatis日志配置

MyBatis作为一个封装好的ORM框架,其运行过程我们没有办法跟踪,为了让开发者了解MyBatis执行流程及每个执行步骤所完成的工作,MyBatis框架本身继承了log4j日志框架,对运行的过程进行跟踪记录。
我们只需对MyBatis进行相关的日志配置,就可以看到MyBatis运行过程中的日志信息。

3.1 添加日志框架依赖

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
</dependency>

3.2 添加日志配置文件

在resources目录下创建名为 log4j.properties 文件
在 log4j.properties 文件配置日志输出的方式

#声明日志的输出级别及输出方式
log4j.rootLogger=DEBUG,stdout
log4j.logger.org.mybatis.example.BlogMapper=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#定义日志的打印格式
# %t 表示线程名称  %5p 表示输出日志级别 
log4j.appender.stdout.layout.ConversionPattern=[%t] %5p - %n%m

整合Druid连接池

标签:city,gender,member,members,SQL,MyBatis,log4j
来源: https://blog.csdn.net/qq_46425928/article/details/122300747

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有