mybatis学习(45):开启二级缓存

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mybatis学习(45):开启二级缓存

image.png

com.geyao.mybatis.mapper
BlogMapper类
package com.geyao.mybatis.mapper;
 import java.util.List;
 import java.util.Map;
 import org.apache.ibatis.annotations.Param;
 import com.geyao.mybatis.pojo.Blog;
 public interface BlogMapper {
     Blog selectBlog(Integer id);
     Blog selectBlog2(Integer id);
     List<Blog> selectBlogByTitle(String title);
     List<Blog> selectBlogByTitle2(String title);
     List<Blog> selectBlogBySort(String column);
     List<Blog> selectBlogByPage(int offset,int pagesize);
     List<Blog> selectBlogByPage1(@Param(value="offset")int offset,@Param(value="pagesize")int pagesize);
     List<Blog> selectBlogByPage2(Map<String, Object>map);
     int insertBlog(Blog blog);
     int insertBlogMysql(Blog blog);
     int updateBlog(Blog blog);
     int deleteBlogById(Integer id);
     List<Blog> selectActiveBlogByTitle(String title);
     List<Blog> selectActiveBlogByTitleOrStyle(Blog blog);
     List<Blog> selectBlogByCondition(Blog blog);
     int updateBlogByCondition(Blog blog);
     List<Blog> selectBlogByConditionTrim(Blog blog);
     int updateBlogByConditionTrim(Blog blog);
     int deleteBlogList(List<Integer> ids);
 }
 BlogMapper.xml<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
  -->
 <mapper namespace="com.geyao.mybatis.mapper.BlogMapper">
     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
     User类就是users表所对应的实体类
     -->
     <!-- 
         根据id查询得到一个user对象
      -->
      <resultMap type="Blog" id="blogResultMap">
      <id column="id" property="id" jdbcType="INTEGER"></id>
          <result column="authod_id" property="authodId" jdbcType="INTEGER"/>
      </resultMap>
       <!-- sql片段 -->
     <sql id="columnbase">
      select 
         id,
         title,
         authod_id as authodId,
         state,
         featured,
         style
     </sql>
      <!-- crud -->
     <select id="selectBlog" parameterType="int"   resultType="Blog">
         select 
      *
          from Blog where id=#{id}
     </select> 
     <select id="selectBlog2" parameterType="int"  resultMap="blogResultMap">
           select *
          from Blog where id=#{id}
     </select>
     <select id="selectBlogByTitle" parameterType="String" resultMap="blogResultMap">
         select * from Blog where title like #{title}
     </select>
     <select id="selectBlogByTitle2" parameterType="String" resultMap="blogResultMap">
         select * from Blog where title like '${value}'
     </select>
      <select id="selectBlogBySort" parameterType="String" resultMap="blogResultMap">
         select * from Blog order by ${value}
     </select>
       <select id="selectBlogByPage"  resultMap="blogResultMap">
         select * from Blog limit #{0},#{1}
     </select>
      <select id="selectBlogByPage1"  resultMap="blogResultMap">
         select * from Blog limit #{offset},#{pagesize}
     </select>
      <select id="selectBlogByPage2"  resultMap="blogResultMap">
         select * from Blog limit #{offset},#{pagesize}
     </select>
      <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
      <insert id="insertBlogOracle" parameterType="Blog" >
      <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
          select seq.nextval as id from dual
      </selectKey>
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
      <insert id="insertBlogMysql" parameterType="Blog" >
      <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
          SELECT LAST_INSERT_ID()
      </selectKey>
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
     <update id="updateBlog" parameterType="Blog" >
     UPDATE 
     Blog
     SET
     title = #{title},
    authod_id = #{authodId},
     state = #{state},
     featured = #{featured},
 style= #{ style}
     WHERE id = #{id}
     </update>
     <delete id="deleteBlogById" parameterType="int">
         delete from blog where id =#{id}
     </delete>
     <!-- 动态sql -->
     <select id="selectActiveBlogByTitle" parameterType="String" resultMap="blogResultMap">
         SELECT * FROM blog
         where state ='ACTIVE'
         <if test="value!=null and value !=''">
         AND title LIKE '%o%'
         </if>
     </select>
     <select id="selectActiveBlogByTitleOrStyle" parameterType="Blog" resultMap="blogResultMap">
     SELECT * FROM blog
         where state ='ACTIVE'
         <choose>
         <when test="title !=null and title !=''">
             and lower(title) like lower(#{title})
         </when>
         <when test="style !=null and style!=''">
         </when>
         <otherwise>
         and featured=true;
         </otherwise>
         </choose>
     </select>
     <select id="selectBlogByCondition" parameterType="Blog" resultMap="blogResultMap">
     select * from blog
     <where>
     <if test="state !=null and state !=''">
     state=#{state}
     </if>
     <if test="title !=null and title !=''">
     and lower(title) like lower(#{title})
     </if>
     <if test=" featured !=null">
    and featured = #{featured}
     </if>
     </where>
     </select>
       <update id="updateBlogByCondition" parameterType="Blog" >
     UPDATE 
     Blog
     <set>
     <if test="title!=null">title = #{title},</if>
    <if test="authodId!=null">authod_id = #{authodId},</if>
     <if test="state!=null">state = #{state},</if>
     <if test="featured!=null">featured = #{featured},</if>
 <if test="style!=null">style= #{ style}</if>
 </set>
     WHERE id = #{id}
     </update>
    <select id="selectBlogByConditionTrim" parameterType="Blog" resultMap="blogResultMap">
     select * from blog
     <trim prefix="where" prefixOverrides="and / or">
     <if test="state !=null and state !=''">
     state=#{state}
     </if>
     <if test="title !=null and title !=''">
      lower(title) like lower(#{title})
     </if>
     <if test=" featured !=null">
    and featured = #{featured}
     </if>
     </trim>
     </select>
         <update id="updateBlogByConditionTrim" parameterType="Blog" >
     UPDATE 
     Blog
     <trim prefix="set" suffixOverrides=",">
     <if test="title!=null">title = #{title},</if>
    <if test="authodId!=null">authod_id = #{authodId},</if>
     <if test="state!=null">state = #{state},</if>
     <if test="featured!=null">featured = #{featured},</if>
 <if test="style!=null">style= #{ style}</if>
 </trim>
     WHERE id = #{id}
     </update>
     <delete id="deleteBlogList" parameterType="list" >
         delete from Blog where id in
         <foreach collection="list" item="item" open="(" close= ")" separator=",">
         #{item}
         </foreach>
     </delete>
 </mapper>
 com.geyao.mybatis.pojoBlog类
package com.geyao.mybatis.pojo;
 public class Blog {
     private Integer id;
     private String title;
     private int authodId;
     private String state;
     private Boolean featured;
     private String style;
     public Blog() {
         super();
         this.title="未命名";
         this.authodId=4;
         this.state="NOT";
         this.featured=false;
         this.style="red";    
     }
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getTitle() {
         return title;
     }
     public void setTitle(String title) {
         this.title = title;
     }
     public int getAuthodId() {
         return authodId;
     }
     public void setAuthodId(int authodId) {
         this.authodId = authodId;
     }
     public String getState() {
         return state;
     }
     public void setState(String state) {
         this.state = state;
     }
     public Boolean getFeatured() {
         return featured;
     }
     public void setFeatured(Boolean featured) {
         this.featured = featured;
     }
     public String getStyle() {
         return style;
     }
     public void setStyle(String style) {
         this.style = style;
     }
     @Override
     public String toString() {
         return "Blog [id=" + id + ", title=" + title + ", authodId=" + authodId + ", state=" + state + ", featured="
                 + featured + ", style=" + style + "]\n";
     }
 }
 com.geyao.mybatis.utilMybatisUtil类
package com.geyao.mybatis.util;
 import java.io.InputStream;
 import java.io.Reader;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 public class MyBatisUtil {
     private static SqlSessionFactory sqlSessionFactory =null;
     static {
         try {
             InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
     private MyBatisUtil() {}
     public static SqlSession getSqlSession() {
         return sqlSessionFactory.openSession();
     }
 }
 log4j.properties### \u914D\u7F6E\u6839 ###
 log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE
 ### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176\u4E2Dlogger\u540E\u9762\u7684\u5185\u5BB9\u5168\u90E8\u4E3Ajar\u5305\u4E2D\u6240\u5305\u542B\u7684\u5305\u540D ###
 log4j.logger.org.apache=dubug
 log4j.logger.java.sql.Connection=dubug
 log4j.logger.java.sql.Statement=dubug
 log4j.logger.java.sql.PreparedStatement=dubug
 log4j.logger.java.sql.ResultSet=dubug
 ### \u914D\u7F6E\u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
 log4j.appender.console = org.apache.log4j.ConsoleAppender
 log4j.appender.console.Target = System.out
 log4j.appender.console.layout = org.apache.log4j.PatternLayout
 log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n
 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>
 <typeAliases>
     <typeAlias type="com.geyao.mybatis.pojo.Blog" alias="Blog"/>
 </typeAliases>
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8" />
                 <property name="username" value="root" />
                 <property name="password" value="123" />
             </dataSource>
         </environment>
     </environments>
       <mappers>
         <!-- 注册userMapper.xml文件, 
          userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
          <mapper resource="com/geyao/mybatis/mapper/BlogMapper.xml"/>
      </mappers>
 </configuration>
 单元测试com.geyao.mybatis.util
testSelectBlog类
package com.geyao.mybatis.mapper;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 import com.geyao.mybatis.pojo.Blog;
 import com.geyao.mybatis.util.MyBatisUtil;
 public class testSelectBlog {
     @Test
     public void testSelectBlogNoInterface() {
         SqlSession session =MyBatisUtil.getSqlSession();
         Blog blog =(Blog)session.selectOne("com.geyao.mybatis.mapper.BlogMapper.selectBlog", 101);
         session.close();
         System.out.println(blog);
     }
 @Test
 public void testSelectBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog(1);
     System.out.println(blog);
 }
 @Test
 public void testSelectBlog2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog2(1);
     System.out.println(blog);
 }
 @Test
 public void testselectBlogByTitle() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByTitle("%g%");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByTitle2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByTitle2("%g%");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogBySort() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogBySort("title");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByPage(2,2);
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage1() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByPage1(2,2);
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Map<String, Object> map =new HashMap<String, Object>();
     map.put("offset", 2);
     map.put("pagesize", 2);
     List<Blog> blogList = blogMapper.selectBlogByPage2(map);
     System.out.println(blogList);
 }
 @Test
 public void testInsertBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog=new Blog();
     int count= blogMapper.insertBlog(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("插入的"+count+"记录");
 }
 @Test
 public void testinsertBlogMysql() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog=new Blog();
     int count= blogMapper.insertBlogMysql(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("插入的"+count+"记录");
 }
 @Test
 public void testupdateBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog=new Blog();
     blog.setId(1);
     blog.setTitle("geyao");
     blog.setStyle("balck");
     blog.setState("active");
     blog.setFeatured(false);
     blog.setAuthodId(2);
     int count= blogMapper.updateBlog(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("修改"+count+"记录");
 }
 }
 jar包

image.pngimage.png

com.geyao.mybatis.mapper
BlogMapper类
package com.geyao.mybatis.mapper;
 import java.util.List;
 import java.util.Map;
 import org.apache.ibatis.annotations.Param;
 import com.geyao.mybatis.pojo.Blog;
 public interface BlogMapper {
     Blog selectBlog(Integer id);
     Blog selectBlog2(Integer id);
     List<Blog> selectBlogByTitle(String title);
     List<Blog> selectBlogByTitle2(String title);
     List<Blog> selectBlogBySort(String column);
     List<Blog> selectBlogByPage(int offset,int pagesize);
     List<Blog> selectBlogByPage1(@Param(value="offset")int offset,@Param(value="pagesize")int pagesize);
     List<Blog> selectBlogByPage2(Map<String, Object>map);
     int insertBlog(Blog blog);
     int insertBlogMysql(Blog blog);
     int updateBlog(Blog blog);
 }
 BlogMapper.xml<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
  -->
 <mapper namespace="com.geyao.mybatis.mapper.BlogMapper">
     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
     User类就是users表所对应的实体类
     -->
     <!-- 
         根据id查询得到一个user对象
      -->
      <resultMap type="Blog" id="blogResultMap">
      <id column="id" property="id" jdbcType="INTEGER"></id>
          <result column="authod_id" property="authodId" jdbcType="INTEGER"/>
      </resultMap>
     <select id="selectBlog" parameterType="int"   resultType="Blog">
         select 
         id,
         title,
         authod_id as authodId,
         state,
         featured,
         style
          from Blog where id=#{id}
     </select> 
     <select id="selectBlog2" parameterType="int"  resultMap="blogResultMap">
           select *
          from Blog where id=#{id}
     </select>
     <select id="selectBlogByTitle" parameterType="String" resultMap="blogResultMap">
         select * from Blog where title like #{title}
     </select>
     <select id="selectBlogByTitle2" parameterType="String" resultMap="blogResultMap">
         select * from Blog where title like '${value}'
     </select>
      <select id="selectBlogBySort" parameterType="String" resultMap="blogResultMap">
         select * from Blog order by ${value}
     </select>
       <select id="selectBlogByPage"  resultMap="blogResultMap">
         select * from Blog limit #{0},#{1}
     </select>
      <select id="selectBlogByPage1"  resultMap="blogResultMap">
         select * from Blog limit #{offset},#{pagesize}
     </select>
      <select id="selectBlogByPage2"  resultMap="blogResultMap">
         select * from Blog limit #{offset},#{pagesize}
     </select>
      <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
      <insert id="insertBlogOracle" parameterType="Blog" >
      <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
          select seq.nextval as id from dual
      </selectKey>
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
      <insert id="insertBlogMysql" parameterType="Blog" >
      <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
          SELECT LAST_INSERT_ID()
      </selectKey>
         INSERT INTO Blog(
         title,
         authod_id,
         state,
         featured,
         style
         )
         VALUES(
         #{title},
         #{authodId},
         #{state},
         #{featured},
         #{style}
         )
     </insert>
     <update id="updateBlog" parameterType="Blog" >
     UPDATE 
     Blog
     SET
     title = #{title},
    authod_id = #{authodId},
     state = #{state},
     featured = #{featured},
 style= #{ style}
     WHERE id = #{id}
     </update>
 </mapper>
 com.geyao.mybatis.pojoBlog类
package com.geyao.mybatis.pojo;
 public class Blog {
     private Integer id;
     private String title;
     private int authodId;
     private String state;
     private Boolean featured;
     private String style;
     public Blog() {
         super();
         this.title="未命名";
         this.authodId=4;
         this.state="NOT";
         this.featured=false;
         this.style="red";    
     }
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getTitle() {
         return title;
     }
     public void setTitle(String title) {
         this.title = title;
     }
     public int getAuthodId() {
         return authodId;
     }
     public void setAuthodId(int authodId) {
         this.authodId = authodId;
     }
     public String getState() {
         return state;
     }
     public void setState(String state) {
         this.state = state;
     }
     public Boolean getFeatured() {
         return featured;
     }
     public void setFeatured(Boolean featured) {
         this.featured = featured;
     }
     public String getStyle() {
         return style;
     }
     public void setStyle(String style) {
         this.style = style;
     }
     @Override
     public String toString() {
         return "Blog [id=" + id + ", title=" + title + ", authodId=" + authodId + ", state=" + state + ", featured="
                 + featured + ", style=" + style + "]\n";
     }
 }
 com.geyao.mybatis.utilMybatisUtil类
package com.geyao.mybatis.util;
 import java.io.InputStream;
 import java.io.Reader;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 public class MyBatisUtil {
     private static SqlSessionFactory sqlSessionFactory =null;
     static {
         try {
             InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
     private MyBatisUtil() {}
     public static SqlSession getSqlSession() {
         return sqlSessionFactory.openSession();
     }
 }
 log4j.properties### \u914D\u7F6E\u6839 ###
 log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE
 ### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176\u4E2Dlogger\u540E\u9762\u7684\u5185\u5BB9\u5168\u90E8\u4E3Ajar\u5305\u4E2D\u6240\u5305\u542B\u7684\u5305\u540D ###
 log4j.logger.org.apache=dubug
 log4j.logger.java.sql.Connection=dubug
 log4j.logger.java.sql.Statement=dubug
 log4j.logger.java.sql.PreparedStatement=dubug
 log4j.logger.java.sql.ResultSet=dubug
 ### \u914D\u7F6E\u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
 log4j.appender.console = org.apache.log4j.ConsoleAppender
 log4j.appender.console.Target = System.out
 log4j.appender.console.layout = org.apache.log4j.PatternLayout
 log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n
 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>
 <typeAliases>
     <typeAlias type="com.geyao.mybatis.pojo.Blog" alias="Blog"/>
 </typeAliases>
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8" />
                 <property name="username" value="root" />
                 <property name="password" value="123" />
             </dataSource>
         </environment>
     </environments>
       <mappers>
         <!-- 注册userMapper.xml文件, 
          userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
          <mapper resource="com/geyao/mybatis/mapper/BlogMapper.xml"/>
      </mappers>
 </configuration>
 单元测试com.geyao.mybatis.util
testSelectBlog类
package com.geyao.mybatis.mapper;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 import com.geyao.mybatis.pojo.Blog;
 import com.geyao.mybatis.util.MyBatisUtil;
 public class testSelectBlog {
     @Test
     public void testSelectBlogNoInterface() {
         SqlSession session =MyBatisUtil.getSqlSession();
         Blog blog =(Blog)session.selectOne("com.geyao.mybatis.mapper.BlogMapper.selectBlog", 1);
         session.close();
         System.out.println(blog);
     }
 @Test
 public void testSelectBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog(1);
     System.out.println(blog);
 }
 @Test
 public void testSelectBlog2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog2(1);
     System.out.println(blog);
 }
 @Test
 public void testselectBlogByTitle() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByTitle("%g%");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByTitle2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByTitle2("%g%");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogBySort() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogBySort("title");
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByPage(2,2);
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage1() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList = blogMapper.selectBlogByPage1(2,2);
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByPage2() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Map<String, Object> map =new HashMap<String, Object>();
     map.put("offset", 2);
     map.put("pagesize", 2);
     List<Blog> blogList = blogMapper.selectBlogByPage2(map);
     System.out.println(blogList);
 }
 @Test
 public void testInsertBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog=new Blog();
     int count= blogMapper.insertBlog(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("插入的"+count+"记录");
 }
 @Test
 public void testinsertBlogMysql() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog=new Blog();
     int count= blogMapper.insertBlogMysql(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("插入的"+count+"记录");
 }
 @Test
 public void testupdateBlog() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog(1);
     //Blog blog=new Blog();
     blog.setId(1);
     blog.setTitle("geyao");
     blog.setAuthodId(3);
     //blog.setStyle("balck");
     //blog.setState("active");
     //blog.setFeatured(false);
     //blog.setAuthodId(2);
     int count= blogMapper.updateBlog(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("修改"+count+"记录");
 }
 @Test
 public void testdeleteBlogById() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     int count= blogMapper.deleteBlogById(3);
     session.commit();
     session.close();
     System.out.println("删除的"+count+"记录");
 }
 @Test
 public void testselectActiveBlogByTitle() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Blog> blogList=blogMapper.selectActiveBlogByTitle("o");
     session.close();
     System.out.println(blogList);
 }
 @Test
 public void testselectActiveBlogByTitleOrStyle() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = new Blog();
     blog.setTitle("%o%");
     blog.setStyle("black");
     List<Blog> blogList=blogMapper.selectActiveBlogByTitleOrStyle(blog);
     session.close();
     System.out.println(blogList);
 }
 @Test
 public void testselectBlogByCondition() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = new Blog();
     blog.setTitle("%o%");
     List<Blog> blogList=blogMapper.selectBlogByCondition(blog);
     session.close();
     System.out.println(blogList);
 }
 @Test
 public void tesupdateBlogByCondition() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog(1);
     //Blog blog=new Blog();
     blog.setId(1);
     blog.setTitle("geyaonice");
     blog.setAuthodId(3);
     //blog.setStyle("balck");
     //blog.setState("active");
     //blog.setFeatured(false);
     //blog.setAuthodId(2);
     int count= blogMapper.updateBlogByCondition(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("修改"+count+"记录");
 }
 @Test
 public void testselectBlogByConditionTrim() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = new Blog();
     blog.setTitle("%o%");
     List<Blog> blogList=blogMapper.selectBlogByConditionTrim(blog);
     session.close();
     System.out.println(blogList);
 }
 @Test
 public void tesupdateBlogByConditionTrim() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog = blogMapper.selectBlog(1);
     //Blog blog=new Blog();
     blog.setId(1);
     blog.setTitle("geyaonice");
     blog.setAuthodId(3);
     //blog.setStyle("balck");
     //blog.setState("active");
     //blog.setFeatured(false);
     //blog.setAuthodId(2);
     int count= blogMapper.updateBlogByConditionTrim(blog);
     session.commit();
     session.close();
     System.out.println(blog);
     System.out.println("修改"+count+"记录");
 }
 @Test
 public void testdeleteBlogList() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     List<Integer> ids=Arrays.asList(2,3,4);
     int count= blogMapper.deleteBlogList(ids);
     session.commit();
     session.close();
     System.out.println("删除"+count+"记录");
 }
 @Test
 public void testSelectBlogCacheLevelOne1() {
     SqlSession session =MyBatisUtil.getSqlSession();
     BlogMapper blogMapper =session.getMapper(BlogMapper.class);
     Blog blog1=blogMapper.selectBlog(1);
     System.out.println("结果已查询");
     Blog blog2=blogMapper.selectBlog(2);
     System.out.println("结果已查询");
     session.close();
     System.out.println("session关闭");
 }
 }
 jar包

image.png


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
存储 缓存 NoSQL
mybatisplus一二级缓存
MyBatis-Plus 继承并优化了 MyBatis 的一级与二级缓存机制。一级缓存默认开启,作用于 SqlSession,适用于单次会话内的重复查询;二级缓存需手动开启,跨 SqlSession 共享,适合提升多用户并发性能。支持集成 Redis 等外部存储,增强缓存能力。
|
6月前
|
缓存 Java 数据库连接
Mybatis一级缓存详解
Mybatis一级缓存为开发者提供跨数据库操作的一致性保证,有效减轻数据库负担,提高系统性能。在使用过程中,需要结合实际业务场景选择性地启用一级缓存,以充分发挥其优势。同时,开发者需注意其局限性,并做好事务和并发控制,以确保系统的稳定性和数据的一致性。
227 20
|
8月前
|
缓存 Java 数据库连接
Mybatis一级缓存、二级缓存详讲
本文介绍了MyBatis中的查询缓存机制,包括一级缓存和二级缓存。一级缓存基于同一个SqlSession对象,重复查询相同数据时可直接从缓存中获取,减少数据库访问。执行`commit`操作会清空SqlSession缓存。二级缓存作用于同一namespace下的Mapper对象,支持数据共享,需手动开启并实现序列化接口。二级缓存通过将数据存储到硬盘文件中实现持久化,为优化性能,通常在关闭Session时批量写入缓存。文章还说明了缓存的使用场景及注意事项。
301 7
Mybatis一级缓存、二级缓存详讲
|
9月前
|
缓存 Java 数据库连接
十、MyBatis的缓存
十、MyBatis的缓存
194 6
|
10月前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
203 6
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
11月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
451 4
|
11月前
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
206 1
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
470 5
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
168 2