这里写自定义目录标题
- 一 创建Maven工程
- 1 打包方式设置为jar
- 2 引入依赖进去
- 二 创建MyBatis的核心配置文件
- 1 配置核心文件
- 2 创建mapper接口
- 3 创建mabatis的映射文件
- 4 测试文件的写法
- 5 需要代码可以访问gitee仓库去看看
- 6 log4j的日志功能
- 三 先改方法,后改映射文件
- 1 Test注解的作用
- 2 增加修改用户信息的测试代码
- 3 查找用户信息的代码
- 4 RESULT
结构图
一 创建Maven工程
1 打包方式设置为jar
2 引入依赖进去
二 创建MyBatis的核心配置文件
框架就是jar包加上配置文件
核心配置文件习惯上命名为
mybatis-config.xml
整合Spring框架后,这个配置文件可以省略
1 配置核心文件
<?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
2 创建mapper接口
MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。
package com.xyt.mabatis.mapper;
public interface UserMapper {
int insertUser();
}
3 创建mabatis的映射文件
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,'男','1234567@qq.com')
</insert>
</mapper>
注意:这个字段名,一定要和数据库里的字段名对应上
4 测试文件的写法
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);
}
}
执行两次,数据库里面就多了两条数据
5 需要代码可以访问gitee仓库去看看
https://gitee.com/wang-sanfeng123/MyBatisTest
6 log4j的日志功能
在子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,'男','1234567@qq.com') (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语句,和受影响的行数
三 先改方法,后改映射文件
1 Test注解的作用
@Test
注解是JUnit测试的基础,JUnit 4的优势就在于支持了注解。
@Test
的使用 是该方法可以不用main方法调用就可以测试出运行结果,是一种测试方法,
一般函数都需要有main方法调用才能执行,注意被测试的方法必须是public修饰的。
2 增加修改用户信息的测试代码
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)
3 查找用户信息的代码
resultType:数据库字段和属性的个数一样
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='1234567@qq.com'}
4 RESULT
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='1234567@qq.com'}
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='1234567@qq.com'}
User{id=2, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=4, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=6, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=7, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=8, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=9, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=10, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}