SSM第8天 MyBatis动态SQL 和Log4j

一、mybatis.xml文件

1.1 typeAliases别名

mybatis.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.zhiyou100.model.Course" alias="Course"  />
		<typeAlias type="com.zhiyou100.model.Subject" alias="Subject"/>
	</typeAliases> 
</configuration>
mapper.xml
<mapper namespace="com.zhiyou100.dao.CourseDAO">
	<resultMap type="Course" id="course">
		<id property="id" column="id"/>
		<result property="courseTitle" column="course_title"/>
		<result property="courseDesc" column="course_desc"/>
		<result property="subjectID" column="subject_id"/>
	</resultMap>
	<select id="queryAll" resultMap="course">
	
		select * from course
	
	</select>
</mapper>	

1.2 setting标签

https://blog.csdn.net/u014231523/article/details/53056032

1.3 cacheEnabled 二级缓存

<setting name="cacheEnabled" value="true"/>

1.4 mapUnderscoreToCamelCase

<setting name="mapUnderscoreToCamelCase" value="true"/>

二级缓存和一级缓存

1.1 一级缓存

		InputStream inputStream = Resources.getResourceAsStream("1.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = factory.openSession();
		StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
		studentMapper.queryAll();
		studentMapper.queryAll();
	
<!--当我们在同一个sqlSession中,执行查询操作,mybatis会进行数据的缓存-->


SqlSession sqlSession2 = factory.openSession();
		StudentMapper studentMapper2 = sqlSession2.getMapper(StudentMapper.class);
		studentMapper2.queryAll();


<!-- 但是当我们在不同的sqlSession中,不会进行缓存 -->
<!-- 这种被称为一级缓存 -->

1.2 SSM中一级缓存无效

在框架中,每次执行数据库操作,spring都会执行创建一个新的sqlSession,所以一级缓存无效

1.3 二级缓存

二级缓存是mapper级别,
开启二级缓存
需要mybatis.xml 中添加
<setting name="cacheEnabled" value="true"/>
以及xml中
<cache />
Model类实现Serializable接口

一、Log4j

1.1 pom.xml

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>

1.2 log4j.properties

log4j.rootLogger = debug,stdout,D,E

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.Java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

1.3 mybatis.xml

<settings>
	<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

1.4 Java

public static Logger logger = Logger.getLogger(MainClass.class);
logger.trace("----------------trace");
logger.info("------------------info");
logger.warn("-----------------warn");
logger.error("------------------error");
logger.fatal("-----------------fatal");

二、#{} 与${} 的区别

#{}:防止sql注入
${}:普通的拼接

三、动态sql(一)

3.1 where

<if test="courseTitle != null ">
	course_title = #{courseTitle},
</if>

3.2 set

<update id="update" parameterType="Course">
	update course
	<set>
		
		<if test="courseTitle != null ">
			course_title = #{courseTitle},
		</if>

		<if test="courseDesc != null">
			course_desc = #{courseDesc},
		</if>
		<if test="subjectID != null">
			subject_id = #{subjectID},
		</if>
	</set>
	where
	id = #{id}
</update>
tips:
set标签会自动生成set关键字所以sql语句不需要写set
set会自动将多余的逗号,给删除掉

3.3 where

SELECT * FROM course
<where> 
<if test="id != null">
id <= #{id}
AND

</if>
<if test="course_title != null">
course_title LIKE CONCAT('%','Spring','%')
</if>
</where>
tips:
where标签会自动生成where关键字所以sql语句不需要写where
where 会将多余的and 和or 给删除掉

四、动态sql(二)批量删除和添加

4.1 DAO

package com.zhiyou100.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.zhiyou100.model.Course;
@Mapper
public interface CourseDAO extends BaseDAO<Course>{
    //批量删除List类型
	public void deleteMoreById1(List<Integer> ids);
	//批量删除数组类型
	public void deleteMoreById2(int [] ids);
	//批量添加List类型
	public void addMore(List<Course> courses);
}

4.2 批量删除(List类型)

<delete id="deleteMoreById1" parameterType="int">
	DELETE FROM course
	WHERE
	id in (
	<!-- 1,3,5,7 -->
	<foreach separator="," collection="list" item="id">
		#{id}
	</foreach>
	)
</delete>

parameterType参数类型为:List
collection集合数据为:list
item为元素变量名
separator为分割内容

4.2 批量删除(数组类型)

<delete id="deleteMoreById2" parameterType="int">
	DELETE FROM course
	WHERE
	id in (
	<foreach separator="," item="id" collection="array">
		#{id}
	</foreach>

	)

</delete>
parameterType参数类型为:int[]
collection集合数据为:array

4.3 批量添加(List类型)

<insert id="addMore" parameterType="List">
	INSERT INTO course VALUES
	<foreach collection="list" separator="," item="course">
	(null,#{course.courseTitle},#{course.courseDesc},#{course.subjectID})
	</foreach>
</insert>

4.4 自己研究出批量添加(数组类型)

五、pagehelper

https://pagehelper.github.io/docs/howtouse/

六、作业

1.使用SSM进行修改头像和修改个人资料



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值