Mybatis学习笔记一
Mybatis学习笔记一
概述
Mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
框架快速入门
XML方式开发
1.数据库准备
在mysql数据库中创建一个库,并在该库中创建一张用户表,添加几条用户信息
2.使用IDEA创建一个maven项目(直接点击next)
3.等待项目加载好之后,在pom文件里添加我们需要的依赖
添加mybatis、mysql、log4j(日志包)、junit(测试包)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
4.编写用户的实体类
在java目录下建立实体类的包并在其下新建一个实体类,实体类代码如下:
package com.mybatis.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @Author: gaoyk
* @Date: 2020/7/29 10:33
*/
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
5.编写用户的持久层接口
在实体类包的同级再建立一个包,在该包下面新建持久层接口,代码如下:
package com.mybatis.dao;
import com.mybatis.domain.User;
import java.util.List;
/**
* @Author: gaoyk
* @Date: 2020/7/29 10:47
*/
public interface IUserDao {
List<User> findAll();
}
6.添加持久层接口的映射文件
在resources目录下创建一个与持久层接口一致的目录,在其下创建映射文件
当前整体目录结构如下:
映射文件代码如下:
<?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.mybatis.dao.IUserDao">
<!--配置查询所有 这里的id需要和持久层接口保持一致,resultType则对应你的实体类-->
<select id="findAll" resultType="com.mybatis.domain.User">
select * from user
</select>
</mapper>
7.编写Mysql的配置文件
在resources目录下创建一个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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 mybatisdb为之前创建的数据库库名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
<property name="username" value="你的用户名"/>
<property name="password" value="你的密码"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/mybatis/dao/IUserDao.xml"/>
</mappers>
</configuration>
8.在resources目录下添加日志的配置文件(可选)
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
9.在test目录下编写测试类
package com.mybatis.test;
import com.mybatis.dao.IUserDao;
import com.mybatis.domain.User;
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 java.io.InputStream;
import java.util.List;
/**
* @Author: gaoyk
* @Date: 2020/7/29 11:02
*/
public class MybatisTest {
public static void main(String[] args)throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
10.运行测试代码
结果与数据库User表一致,测试成功
注解方式开发
相比xml方式,注解开发不用编写持久层接口的映射文件,其他与xml配置开发方式基本一致,仅需要修改一下两处代码
1.修改持久层接口代码
package com.mybatis.dao;
import com.mybatis.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Author: gaoyk
* @Date: 2020/7/29 10:47
*/
public interface IUserDao {
@Select("select * from user")
List<User> findAll();
}
2.mysql配置文件中原本的映射文件位置,直接改为当前持久层接口类位置
<mappers>
<mapper class="com.mybatis.dao.IUserDao"/>
</mappers>
Mybatis的入门教程到此就结束了,如果发现问题或有任何疑惑请直接指出
本博客参考教程:黑马Java教程
本文地址:https://blog.csdn.net/weixin_43637366/article/details/107673574