【MyBatis】MyBatis对Log4J的支持、MyBatis实现新增、删除、修改、查询
准备:数据库数据
- people表
- people表数据
- eclipse项目结构
一.注解
- 注解存在的意义:简化xml 文件的开发.
- 注解在servlet 3.0 规范之后大力推广的.
- 注解前面的@XXX,表示引用一个@interface
@interface 表示注解声明 - 注解可以有属性,因为注解其实就是一个接口(类)
每次使用注解都需要导包 - 注解语法: @XXXX(属性名= 值)
- 值的分类
如果值是基本数据类型或字符串: 属性名=值
如果值是数组类型: 属性名={值,值}
如果只有一个值可以省略大括号
如果值是类类型,属性名=@名称 - 如果注解只需要给一个属性赋值,且这个属性是默认属性,可以省略
属性名
二. 路径
- 编写路径为了告诉编译器如何找到其他资源.
- 路径分类
相对路径: 从当前资源出发找到其他资源的过程
绝对路径: 从根目录(服务器根目录或项目根目录)出发找到其他资源的过程
标志: 只要以/开头的都是绝对路径 - 绝对路径
如果是请求转发,/
表示项目根目录(WebContent)
其他重定向,<img/> <script/>,<style/>,location.href
等/
都表示服务器根目录(tomcat/webapps 文件夹) - 如果客户端请求的控制器,控制器转发到JSP 后,jsp 中如果使用相对路径,需要按照控制器的路径去找其他资源.
保险办法:使用绝对路径,可以防止上面的问题.
三. Log4J
- 由apache 推出的开源免费日志处理的类库.
- 为什么需要日志:
在项目中编写System.out.println();
输出到控制台,当项目发布到tomcat 后,没有控制台(在命令行界面能看见.),不容易观察一些输出结果.
log4j 作用,不仅能把内容输出到控制台,还能把内容输出到文件中.便于观察结果. - 使用步骤:
3.1 导入log4j-xxx.jar
3.2 在src 下新建log4j.properties(路径和名称都不允许改变)
3.2.1 ConversionPattern :写表达式
3.2.2 log4j.appender.LOGFILE.File 文件位置及名称(日志文件扩展名.log)
log4j.rootCategory=ERROR, CONSOLE ,LOGFILElog4j.logger.cn.hanquan.mapper=DEBUGlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %p %m %nlog4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=C:/picture/my.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %L %n
log4j 输出级别
4.1fatal(致命错误)
>error (错误)
>warn (警告)
>info(普通信息)
>debug(调试信息)
4.2 在log4j.properties 的第一行中控制输出级别:log4j.rootCategory=ERROR, CONSOLE ,LOGFILE
log4j 输出目的地
5.1 在一行控制输出目的地
Pattern 中常用几个表达式
%C
包名+类名
%d{YYYY-MM-dd HH:mm:ss}
时间
%L
行号
%m
信息
%n
换行
四. <settings>
标签
- 在mybatis 全局配置文件中通过
<settings>
标签控制mybatis全局开关 - 在
mybatis.xml
中开启log4j
2.1 必须保证有log4j.jar
2.2 在src
下有log4j.properties
- log4j 中可以输出指定级别的日志(控制某个局部内容的日志级别)
3.1命名级别(包级别):<mapper>namespace
属性中除了最后一个类名
例如,namespace=”com.bjsxt.mapper.PeopleMapper”
其中包级别为com.bjsxt.mapper
,需要在log4j.propeties中:
先在总体级别调成Error
,不输出无用信息
在设置某个指定位置级别为DEBUG
3.2 类级别
3.2.1 namespace 属性值,namespace 类名
3.3 方法级别
3.3.2 使用namespace 属性值+标签id 属性值
五、parameterType 属性
- 在
XXXMapper.xml
中<select><delete>
等标签的parameterType
可以控制参数类型 SqlSession
的selectList()
和selectOne()
的第二个参数和selectMap()
的第三个参数都表示方法的参数.
2.1 java示例
2.2 在Mapper.xml 中可以通过#{}
获取参数
parameterType 控制参数类型
#{}获取参数内容
使用索引,从0 开始#{0}
表示第一个参数
也可以使用#{param1}第一个参数
如果只有一个参数(基本数据类型或String),mybatis对#{}里面内容没有要求,只要写内容即可.
如果参数是对象#{属性名}
如果参数是map写成#{key}
#{}
和${}
的区别
3.1#{}
获取参数的内容支持索引获取,param1 获取指定位置参数,并且SQL 使用?占位符
3.2${}
字符串拼接不使用?
,默认找${内容}
内容的get/set 方法,如果写数字,就是一个数字- 如果在xml 文件中出现
<
,>
,"
等特殊字符时,可以使用XML文件转义标签(XML 自身的)
4.1<![CDATA[ 内容]]>
- mybatis 中实现mysql 分页写法
5.1?
不允许在关键字前后进行数学运算,需要在java中计算完成后,传递到mapper.xml 中
5.2 在java 代码中计算
5.3 在mapper.xml 中代码
六. typeAliases 别名
- 系统内置别名: 把类型全小写
- 给某个类起别名
2.1alias=”自定义别名”
2.2 在mapper.xml 中,使用别名pp
引用People
类
- 直接给某个包下所有类起别名,别名为类名,不区分大小写
3.1 mybatis.xml 中配置
3.2 mapper.xml 中通过类名引用
七.MyBatis 实现新增
- 概念复习
1.1 功能:从应用程序角度出发,软件具有哪些功能.
1.2 业务:完成功能时的逻辑.对应Service 中一个方法
1.3 事务:从数据库角度出发,完成业务时需要执行的SQL 集合,统称一个事务.
1.3.1 事务回滚.如果在一个事务中某个SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性. - 在mybatis 中默认是关闭了JDBC 的自动提交功能
2.1 每一个SqlSession 默认都是不自动提交事务.
2.2 session.commit()提交事务.
2.3 openSession(true);自动提交.setAutoCommit(true); - mybatis 底层是对JDBC 的封装.
3.1 JDBC 中executeUpdate()执行新增,删除,修改的SQL.返回值int,表示受影响的行数.
3.2 mybatis 中<insert> <delete> <update>
标签没有resultType 属性,
认为返回值都是int - 在openSession() 时Mybatis 会创建SqlSession 时同时创建一个
Transaction(事务对象),同时autoCommit 都为false
4.1 如果出现异常,应该session.rollback()回滚事务. - 实现新增的步骤
5.1 在mapper.xml 中提供<insert>
标签,标签没有返回值类型
5.2 通过session.insert()调用新增方法
八.MyBatis 实现修改
- 在mapper.xml 中提供
<update>
标签
<update id="upd" parameterType="People">update people set name = #{name} where id = #{id}</update>
- 编写Java代码
People peo = new People();peo.setId(3);peo.setName("王五");int index = session.update("a.b.upd", peo);if(index>0){System.out.println("成功");}else{System.out.println("失败");}session.commit();
九.mybatis 实现删除
- 在mapper.xml 提供
<delete>
标签
<delete id="del" parameterType="int">delete from people where id = #{0}</delete>
- 编写Java代码
int del = session.delete("a.b.del",3);if(del>0){System.out.println("成功");}else{System.out.println("失败");}session.commit();
以上(增加、查询)示例代码
Test.java
package cn.hanquan.test;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import cn.hanquan.pojo.People;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("mybatis.xml");// 工厂模式+构建者模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);SqlSession session = factory.openSession();// 查询语句// 1、查询语句无参数List<People> list1 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAll");System.out.println(list1 + "\n");// 2、查询语句含一个参数People p2 = session.selectOne("cn.hanquan.mapper.PeopleMapper.selOne", 2);System.out.println(p2 + "\n");// 3、查询语句含多个参数:使用MapMap<String, Object> m3 = new HashMap<String, Object>();m3.put("name", "张三");m3.put("age", 25);People p3 = (People) session.selectOne("cn.hanquan.mapper.PeopleMapper.selList", m3);System.out.println(p3 + "\n");// 4、查询语句在xml文件中出现< , > ,双引号等特殊字符List<People> list4 = session.selectList("cn.hanquan.mapper.PeopleMapper.selSpecial", 3);System.out.println(list4 + "\n");// 5、实现分页int pgSize = 2;int pgNum = 3;Map<String, Object> m5 = new HashMap<String, Object>();m5.put("pgSize", pgSize);m5.put("pgStart", pgSize * (pgNum - 1));List<People> list5 = session.selectList("cn.hanquan.mapper.PeopleMapper.selPage", m5);System.out.println(list5 + "\n");// 6、在mybatis.xml中给类起别名List<People> list6 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAlias");System.out.println(list6 + "\n");// 7、在mybatis.xml中通过类名引用List<People> list7 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAliasPkg");System.out.println(list7 + "\n");// 插入语句People p8 = new People();p8.setName("小李");p8.setAge(30);int line8 = session.insert("cn.hanquan.mapper.PeopleMapper.ins", p8);System.out.println(line8);session.commit();// mybatis默认关闭了JDBC的自动提交功能。增删改的时候,需要手动提交事务// session.rollback();//在try..catch中使用rollback回滚事务session.close();}
}
mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="logImpl" value="LOG4J"/></settings><!-- 给类起别名 --><typeAliases><typeAlias type="cn.hanquan.pojo.People" alias="pp"/><package name="cn.hanquan.pojo"/></typeAliases><environments default="default"><environment id="default"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/people?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="g67108864"/></dataSource></environment></environments><mappers><mapper resource="cn/hanquan/mapper/PeopleMapper.xml"/></mappers>
</configuration>
PeopleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 填写实例化的包名+类名,在java代码中调用语句的时候使用 -->
<mapper namespace="cn.hanquan.mapper.PeopleMapper"><!-- 查询语句 --><!-- 不含参数 --><select id="selAll" resultType="cn.hanquan.pojo.People">select * from people</select><!-- 一个参数 --><select id="selOne" resultType="cn.hanquan.pojo.People" parameterType="int">select * from people where id=#{0}</select><!-- 多个参数 --><select id="selList" resultType="cn.hanquan.pojo.People" parameterType="map">select * from people where name=#{name} and age=#{age}</select><!-- 语句中含有<>等特殊符号 --><select id="selSpecial" resultType="cn.hanquan.pojo.People" parameterType="int"><![CDATA[select * from people where id>#{0}]]></select><!-- limit分页查询 --><select id="selPage" resultType="cn.hanquan.pojo.People" parameterType="map">select * from people limit #{pgStart}, #{pgSize}</select><!-- 在mybatis.xml中给类起别名 --><select id="selAlias" resultType="pp">select * from people</select><!-- 在mybatis.xml中通过类名引用 --><select id="selAliasPkg" resultType="People">select * from people</select><!-- 插入语句 --><insert id="ins" parameterType="People">insert into people values(default, #{name}, #{age})</insert></mapper>
输出
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters:
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9
[People [id=1, name=小明, age=25], People [id=2, name=张三, age=23], People [id=3, name=张三, age=24], People [id=4, name=张三, age=25], People [id=5, name=张三, age=26], People [id=6, name=张六, age=26], People [id=7, name=张七, age=0], People [id=8, name=张八, age=28], People [id=9, name=张九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where id=?
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 2(Integer)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 1
People [id=2, name=张三, age=23]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where name=? and age=?
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 张三(String), 25(Integer)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 1
People [id=4, name=张三, age=25]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where id>?
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 3(Integer)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 6
[People [id=4, name=张三, age=25], People [id=5, name=张三, age=26], People [id=6, name=张六, age=26], People [id=7, name=张七, age=0], People [id=8, name=张八, age=28], People [id=9, name=张九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people limit ?, ?
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 4(Integer), 2(Integer)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 2
[People [id=5, name=张三, age=26], People [id=6, name=张六, age=26]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters:
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9
[People [id=1, name=小明, age=25], People [id=2, name=张三, age=23], People [id=3, name=张三, age=24], People [id=4, name=张三, age=25], People [id=5, name=张三, age=26], People [id=6, name=张六, age=26], People [id=7, name=张七, age=0], People [id=8, name=张八, age=28], People [id=9, name=张九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters:
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9
[People [id=1, name=小明, age=25], People [id=2, name=张三, age=23], People [id=3, name=张三, age=24], People [id=4, name=张三, age=25], People [id=5, name=张三, age=26], People [id=6, name=张六, age=26], People [id=7, name=张七, age=0], People [id=8, name=张八, age=28], People [id=9, name=张九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: insert into people values(default, ?, ?)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 小李(String), 30(Integer)
org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Updates: 1
1
【MyBatis】MyBatis对Log4J的支持、MyBatis实现新增、删除、修改、查询相关推荐
- log4j配置文件_Mybatis对log4j的支持及常用标签-Mybatis(6)
1. MyBatis 对 log4j的支持 1.1 通过<settings> 开启 log4j 的支持 <settings>用于设置 MyBatis 在运行时的行为方式, 例如 ...
- mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页
本文提供一种方法,让MyBatis Generator产生的代码支持分页, 适用于MySQL. 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? select * from t_us ...
- java mysql geometry,扩展mybatis和通用mapper,支持mysql的geometry类型字段,mybatis用mapper...
扩展mybatis和通用mapper,支持mysql的geometry类型字段,mybatis用mapper 因项目中需要用到地理位置信息的存储.查询.计算等,经过研究决定使用mysql(5.7版本) ...
- 在MyBatis中使用log4j
文章目录 前言 一.快速入门 1. 在mybatis的配置文件中配置 2. 导入jar包 3. 在resources目录下创建log4j.properties 二.log4j.properties的简 ...
- mybatis使用map插入数据和Mybatis的核心配置文件LOG4J
mybatis使用map插入数据 UserMapper.java包中写入 int addUser2(Map<Object,String> map); Usermapper.xml < ...
- mybatis plus 新增,修改
simple curd 1. mybatis-plus 2. 以用户表为例,德莫 1. mybatis-plus mybatis的升级版,curd的奇淫技巧. MyBatis-Plus(简称 MP)是 ...
- MyBatis由浅入深学习总结之一:MyBatis入门案例
一.MyBatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- MyBatis从入门到精通(一)—MyBatis基础知识和快速入门
Mybatis简介 原始jdbc操作(查询数据) Connection connection = null;PreparedStatement preparedStatement = null;Res ...
- MyBatis和ORM的区别以及Mybatis和Hibernate的区别
ORM: 即Object Relation Mapping,即对象关联映射.所以ORM就是将Java中的对象和数据库中的表关联对应起来. 思考一下Mybatis,Mybatis相当于将mapper中的 ...
最新文章
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨
- [Poetize6] IncDec Sequence
- tomcat端口被占用如何解决
- 第五届蓝桥杯省赛javaB组试题解析
- ubuntu 局域网dns服务器_如何在 Ubuntu 16.04 服务器上配置内网 DNS 服务
- OS / Linux / Select 调用流程
- VTK:Utilities之LUTUtilities
- Module build failed (from ./node_modules/sass-loader/lib/loader.js):
- 陈小玉:算法学习建议
- leetcode题解102-二叉树的层序遍历
- 线程演示生产者和消费者的一个例子
- python 3.3.3 字面量,正则,反斜杠和原始字符串
- 禁用AutoCAD的命令
- html2canvas 像素,html2canvas 如何生成高清图片?
- linux启动盘制作
- RTF文件结构分析及其应用
- 转:隐马尔可夫模型(HMM)攻略
- 用eclipse europa开发web service服务 - 东写西读终见大海无量 - JavaEye技术网站
- 征服英语的33条军规
- DeFi对金融世界的变革|读麦道夫庞氏骗局有感