结构图
框架就是jar包加上配置文件
核心配置文件习惯上命名为
mybatis-config.xml
整合Spring框架后,这个配置文件可以省略
<?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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eshop"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件
复数标签套单数标签的格式
-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
注意:核心文件中可能会报一个字符集设置的错误
Unknown initial character set index '255' received from server. Initial client character
解决的话,就在后面加上一个中加入一个字符设置
dbc:mysql://localhost:3306/eshop?useUnicode=true&characterEncoding=utf8
MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。
package com.xyt.mabatis.mapper;
public interface UserMapper {
int insertUser();
}
Object Relational Mapping
ORM:对象关系映射
对象:java的实体类对象
关系:关系型数据库
映射:两者之间对应的关系
类的实例化对象,描述的是一个具体的事务。表中的一行记录
<?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="com.xyt.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values (1,'张三','123',22,'男','[email protected]')
</insert>
</mapper>
注意:这个字段名,一定要和数据库里的字段名对应上
package com.xyt.mybatis.test;
import com.xyt.mybatis.mapper.UserMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MabitsTest1 {
/**
* SqlSession默认不自动提交事务,若需要自动提交事务
* 可以使用SqlSessionFactory.openSession(true);
*/
@Test
public void testMyBatis() throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取sqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//测试功能
int result = mapper.insertUser();
//提交事务
sqlSession.commit();
System.out.println("result:"+result);
}
}
https://gitee.com/wang-sanfeng123/MyBatisTest
在子pom中配置这个log4j文件
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.7</version>
</dependency>
log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
<level value="info"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
日志·的级别
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详
在配置日志相关文件时
如果报错,就填写相关信息进去
DEBUG 05-14 21:53:09,963 ==> Preparing: insert into t_user values (6,'张三','123',22,'男','[email protected]') (BaseJdbcLogger.java:137)
DEBUG 05-14 21:53:09,986 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 05-14 21:53:09,998 <== Updates: 1 (BaseJdbcLogger.java:137)
result:1
体现了执行得sql语句,和受影响的行数
@Test
注解是JUnit测试的基础,JUnit 4的优势就在于支持了注解。
@Test
的使用 是该方法可以不用main方法调用就可以测试出运行结果,是一种测试方法,
一般函数都需要有main方法调用才能执行,注意被测试的方法必须是public修饰的。
public void testUpdate() throws IOException{
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory
=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession =sqlSessionFactory.openSession(true);
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
mapper.deleteUser();
}
DEBUG 05-14 23:07:28,488 ==> Preparing: DELETE from t_user where username='lisi'; (BaseJdbcLogger.java:137)
DEBUG 05-14 23:07:28,524 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 05-14 23:07:28,546 <== Updates: 1 (BaseJdbcLogger.java:137)
java.lang.NoSuchMethodError: 'boolean org.apache.log4j.Logger.isTraceEnabled()
法
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
结果
DEBUG 05-15 01:24:01,095 ==> Preparing: select * from t_user where id=6; (BaseJdbcLogger.java:137)
DEBUG 05-15 01:24:01,136 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 05-15 01:24:01,173 <== Total: 1 (BaseJdbcLogger.java:137)
User{id=6, username='张三', password='123', age=22, sex='男', email='[email protected]'}
DEBUG 05-15 01:33:26,591 ==> Preparing: select * from t_user where id=6; (BaseJdbcLogger.java:137)
DEBUG 05-15 01:33:26,626 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 05-15 01:33:26,650 <== Total: 1 (BaseJdbcLogger.java:137)
User{id=6, username='张三', password='123', age=22, sex='男', email='[email protected]'}
DEBUG 05-15 01:33:26,652 ==> Preparing: select * from t_user; (BaseJdbcLogger.java:137)
DEBUG 05-15 01:33:26,653 ==> Parameters: (BaseJdbcLogger.java:137)
DEBUG 05-15 01:33:26,659 <== Total: 8 (BaseJdbcLogger.java:137)
User{id=1, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=2, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=4, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=6, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=7, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=8, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=9, username='张三', password='123', age=22, sex='男', email='[email protected]'}
User{id=10, username='张三', password='123', age=22, sex='男', email='[email protected]'}
jdbc.properties配置mysql8.的步骤如下:
在项目中创建jdbc.properties文件。
在jdbc.properties文件中添加以下配置:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
jdbc.username=用户名
jdbc.password=密码
其中,jdbc.driver为MySQL驱动程序的类名,jdbc.url为连接MySQL数据库的URL,jdbc.username为连接MySQL数据库的用户名,jdbc.password为连接MySQL数据库的密码。
将MySQL的驱动程序(mysql-connector-java.jar)放置在项目的classpath中。
在Java代码中使用以下代码获取数据库连接:
Properties props = new Properties();
InputStream in = getClass().getResourceAsStream("/jdbc.properties");
props.load(in);
in.close();
String driver = props.getProperty("jdbc.driver");
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
其中,getClass().getResourceAsStream("/jdbc.properties")用于获取jdbc.properties文件的输入流,props.load(in)用于加载jdbc.properties文件中的配置。最后,使用DriverManager.getConnection()方法获取数据库连接。
MyBatis 中的 jdbc.properties 文件是一个配置文件,用于配置 MyBatis 的数据源和 JDBC 连接属性。该文件通常包含以下属性:
driver:JDBC 驱动程序的名称或类名。
url:JDBC 数据库连接 URL。
username:数据库用户名。
password:数据库密码。
initialSize:连接池的初始大小。
maxActive:连接池的最大活动连接数。
maxIdle:连接池的最大空闲连接数。
minIdle:连接池的最小空闲连接数。
在使用 MyBatis 进行数据库访问时,可以通过读取 jdbc.properties 文件中的这些属性来配置 MyBatis 的数据源和 JDBC 连接属性。
mybatis-config.xml中加入一些信息
type:需要简化描述的目标
alias如果不设置,默认是类名,如果设置,那么就是一个其自己定义的值
<!--设置类型别名的方法-->
<typeAliases>
<typeAlias type="com.xyt.mybatis.pojo.User" alias="User"></typeAlias>
</typeAliases>
意义是在UserMapper.xml中少写一些东西
<select id="getUserList" resultType="User">
select * from t_user;
</select>
<!--引入映射文件-->
<mappers>
<!--<mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包为单位引入映射文件
要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
-->
<package name="com.xyt.mybatis.mapper"/>
</mappers>