JavaEE笔记6--MyBatis框架(初识MyBatis与MyBatis核心配置)

06-MyBatis框架之初识MyBatis与MyBatis核心配置

MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架

一、MyBatis

1、MyBatis资源下载和使用

在这里插入图片描述
在这里插入图片描述
MyBatis下载链接地址: https://github.com/mybatis/mybatis-3/releases
注意:MyBatis3.5及以上版本只能使用MySQL8.0驱动,在使用MySQL8.0驱动时,需通过serverTimezone修改时区为东八区
与MySQL8.0驱动配合使用:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai
8.0驱动:xml路径配置

在这里插入图片描述
在这里插入图片描述

报错1

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: No timezone mapping entry for ‘Asia/Shanghai;characterEncoding=utf8’
解决----只要写时区的,必要写字符编码的

<!-- 1.1配置数据库驱动8.0 -->
		<property name="driverClassName"
			value="com.mysql.cj.jdbc.Driver" />
		<!-- 1.2配置数据库URL8.0和需通过serverTimezone修改时区为东八区 -->
		<property name="url"
			value="jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Shanghai" />
2、MyBatis-持久岑
1.注意

MyBatis3.4配合用数据库5.0或者8.0的驱动包都可以,但是MyBatis3.5以上的,只能用8.0的数据库驱动包

2.MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架

所谓的ORM就是一种为了解决面向对象与关系型数据中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。

3.为什么要用MyBatis

java是先编译后部署语言,如果sql底层改变,Java代码必须改,服务就必须停下,会导致网站在维修时服务器不可用,会很麻烦。
在这里插入图片描述
用MyBatis解决此问题,映射基础(Hibernate与MyBatis:对象关系映射的框架)

4.Hibernate和MyBatis有什么区别?

Hibernate:全自动,可控制性和可操作性大大降低
MyBatis:半自动映射的框架,需要手动写sql命令,可控性好
在这里插入图片描述

5.导入12个jar包

在这里插入图片描述

二、以客户关系管理系统为例(增删改查)

1、增(例:添加客户)

添加操作是通过元素来实现的。例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现。

<insert id="addCustomer" parameterType="cn.hnkjxy.po.Customer">
	insert into t customer(usermame,jobs,phone)values(# {username} ,# {jobs} ,# {phone})
</insert>
2、删(例:删除客户)

删除操作在映射文件中是通过配置元素来实现的。

<delete id="deleteCustomer" parameterType="Intaeger">
	delete from t_ customer where id=# {id}
</delete>
3、改(例:更新客户信息)

更新操作在映射文件中是通过配置元索来实现的。

<update id="updateCustomer" parameterType-*cn.hnkjxy.po.Customer">
	update t _customer set username=# {username} jobs=# {jobs} ,phone=# {phone} where id=# {id}
</update>

在测试类MybatisTest中,添加测试方法updateCustomerTestO, .将id为4的用户职业修改为programmer,电话修改为111111

public void updateCustomerTestO throws Exception{
...
Customer customer = new Customer(;
customer.setld(4);
customer.setUsername("rose");
customer.setJobs("programmer");
customer.setPhone("131111111");
int rows = sqlSession.update("*cn.hnkjxy.mapper"
+ ".CustomerMapperupdateCustomer", customer);
...
4、创建数据库,查询客户

三、MyBatis帮助文档的使用(如何配置一个MyBatis项目)

1、打开MyBatis帮助文档,找到目录

在这里插入图片描述

2、如何写log4j.properties(日志)文件(放在根目录下)

在这里插入图片描述

1.日志文件中强制要求导入的jar包

在这里插入图片描述

2.日志文件的配置和存放位置(classpath-类路径:src)

在这里插入图片描述
代码

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.需要修改的部分

在这里插入图片描述

3、mybatis-config.xml(配置名字可改)文件(放在根目录下,src),配置数据库

在这里插入图片描述

1.mybatis-config.xml(配置文件,名字可以改,知识约定俗成写mybatis-config.xml)放在src下

在这里插入图片描述

2.配置文件代码和要注意的地方

在这里插入图片描述
代码

<?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>
 <environments default="development">
 <environment id="development">
 <transactionManager type="JDBC"/>
 <dataSource type="POOLED">
 <property name="driver" value="${driver}"/>
 <property name="url" value="${url}"/>
 <property name="username" value="${username}"/>
 <property name="password" value="${password}"/>
 </dataSource>
 </environment>
 </environments>
 <mappers>
 <mapper resource="org/mybatis/example/BlogMapper.xml"/>
 </mappers>
</configuration>
3.要修改的地方和易错注意

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、如何写xxxxMapper.xml(映射)文件(放在mapper文件夹下),sql语句编写,替代了dao层

在这里插入图片描述

1.映射文件,放在映射文件夹(mapper)下

代码

<?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="org.mybatis.example.BlogMapper">
 <select id="selectBlog" resultType="Blog">
 select * from Blog where id = #{id}
 </select>
</mapper>
2.注意事项

在这里插入图片描述
在这里插入图片描述

5、需要导入的MyBatis的jar包

在这里插入图片描述
在这里插入图片描述

四、对象关系映射框架

1、测试步骤:
// 1.读取配置文件
// 2.根据配置文件,创建会话工厂
// 3.通过会话工厂,获取会话对象,进行数据的增删改查的操作
// 4.使用会话对象,执行映射文件中的SQL命令,返回映射结果对象--按照姓名username 模糊查找客户
// 5.输出结果
// 6.关闭会话对象
2、功能
在创建好项目的基础再增加·一个功能,只需要2步

1.在mapper映射文件中添加一条sql命令和对应的select
2.在测试文件中,在测试类中添加一个单元测试,在持久化删改查出有修改即可

模糊匹配要用拼接字符串,不能用参数(不能#定位:变量的值)

or 1#:or或,1-true真,#注释-----字符串拼接会被攻击
$:用于拼接字符串
在这里插入图片描述

<!-- sql防注入攻击的方式,不用拼接字符串 -->
		SELECT * FROM t_customer WHERE username LIKE concat('%',#{value},'%')
		<!-- $拼接字符串 -->
		<!-- SELECT * FROM t_customer WHERE username LIKE '%${value}%' -->

五、MyBatis核心对象(2个)

1、SqlSessionFactory
(1)什么是SqlSessionFactory:

●SqlSessionF actory是MyBats框架中十分重要的对象.它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession.
●SiSessonF actory对象的实例可以通过SqISessionF actoryBulder对象来构建,而SqISessionFactory Builder则可以通过XML.配置文件或-一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。

(2)构建SqlSessionFactory

●通过XML配置文件构建出的SqlSessionFactory实例现代码如下:

InputStream inpuStean = Resources getResourceAsStream("配置文件位置"):
SqlSessinFactory sqISessionF actory =new SqlSessionF actory BuilderO builinputStream);

●SqlSessionFactory对象是线程安全的,它一旦被创建, 在整个应用执行期间都会存在。如果我们多次的创建同一个数据库的SqlSessionFactory, .那么此数据库的资源将很容易被耗尽。为此,通常每一个数据库都会只对应一个SiSessionFactory, 所以在构建SqlSessionF actoly实例时,建议使用单例模式

2、SqlSession
(1)什么是SqlSession?

●SqlSession是MyBatis框架中另一个重要的对象, 它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。
●每一个线程都应该有一个自己的Sqlession实例, 并且该实例是不能被共享的。同时,SqlSession实例也 是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在一个类 的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。

(2)SqlSession中的方法
查询方法:
//查出来只有一个对象的
<T> T selectOne(String statement);
<T> T sclectOne(String statement, Object paramcter);
//查出来只有多个对象的
<E> List<E> selectLit(String statemen);
<E> List<E> selectList(String statement. Object parameter);
//通用,不知道查出来的结果有多个条,需要手动写结果集
<E> List<E> selectList(String statement, Object parameter,RowBounds rowBounds);
void select(String statement, Object parameter, ResulHandler handler);
SqlSession中的其他方法:
void commitO; //提交事务的方法。
void rollback);//回滚事务的方法。
void close(); //关闭SqlSession对象。
<T> T getMapper(Class<T> type);//返回Mapper接口的代理对象。
Conmection getConmection0;//获取JDBC收据库连接对象的方法。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值