利用Mybatis框架,从MySQL中查询所有的用户
create table user (id int primary key auto_increment,username varchar(20) not null,birthday date,sex char(1) default '男',address varchar(50)
);insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into user values (null, '玉面狐','1995-03-22','女','积雷山摩云洞');
insert into user values (null, '玉兔精','2010-02-12','女','天竺国皇宫');
insert into user values (null, '豹子精','2008-05-03','男','隐雾山折岳洞');select * from user;
1. 创建Maven项目
2.设置 Maven 的相关依赖
<!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- mybatis --><dependency><groupId&batis</groupId><artifactId>mybatis</artifactId><version>3.5.0</version></dependency><!-- mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency>
3. 创建核心配置文件 l
4.创建日志记录的配置文件 log4j.properties
用来设置日志记录的格式,因为Mybaits需要使用到log4j来记录它的日志
日志文件用来记录程序运行过程中的各种事件
5.编写用户dao接口和dao映射文件 (记得分包)
6.编写用户的实体类文件
7.编写测试代码
项目整体结构
#1. 在resources下创建一个名为log4j.properties
#2. 作用: 记录MyBatis运行过程中的各种事件
代码
### 设置Logger输出级别和输出目的地 ###
Logger=debug, stdout### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
# 1. 可以在Mybatis官网入门中找到配置模板.html
# 2. 在工程中的resources目录下创建一个名为l
# 3. 记得修改第15行的数据库名
代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis//DTD Config 3.0//EN"".dtd">
<configuration><environments default="default"><!--环境变量--><environment id="default"><!--事务管理器:由JDBC管理事务 --><transactionManager type="JDBC"/><!--数据源配置信息:POOLED 使用连接池 --><dataSource type="POOLED"><property name="driver" value=sql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db3"/><property name="username" value="root"/><property name="password" value="******密码*****"/></dataSource></environment></environments><!-- 加载其他的映射文件 --><mappers><mapper resource="com/lijw/l"/></mappers>
</configuration>
# 1. 在com.lijw.dao包下创建一个接口,名为UserMapper
# 2. 在接口中定义一个查询所有用户的方法
代码
package com.lijw.dao;import ity.User;
import java.util.List;/*** 数据访问层方法** @author Aron.li* @date 2021/3/9 0:09*/
public interface UserMapper {/**查询所有的用户*/List<User> findAllUsers();}
# 1. 在 resources 目录下创建一个xml文件,名为l
# 2. 映射文件的模板地址.html
代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd">
<!--
实体类的映射文件
namespace 指定接口的类全名
-->
<mapper namespace="com.lijw.dao.UserMapper"><!--查询语句id: 接口中方法的名字resultType:返回的实体类的类型,类全名--><select id="findAllUsers" resultType="ity.User">select * from user</select>
</mapper>
# 1. 数据库表对应实体a. 属性名和user表中字段名一致# 2. 基本类型使用包装类b. 实体类中基本数据类型,都使用它的包装类。这样与表中的数据更加匹配c. 因为如果从数据库中读取不到对应的数据,应该是null比较合适int id; //默认的值是0 Integer id; //默认是null
User类代码
package ity;import java.io.Serializable;
import java.sql.Date;/**** 用户实体类对象** @author Aron.li* @date 2021/3/9 0:10*/
public class User implements Serializable {private Integer id;private String username;private Date birthday;private String sex;private String address;public User() {}public User(Integer id, String username, Date birthday, String sex, String address) {this.id = id;this.username = username;this.birthday = birthday;this.sex = sex;this.address = address;}....
}
# 1. 在com.lijw.dao下编写一个测试类: TestUserMapper
# 2. 然后运行: 查询到user表中所有数据
代码
package com.lijw.dao;import ity.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 org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** 使用mybatis访问数据库** @author Aron.li* @date 2021/3/9 0:12*/
public class UserMapperTest {@Testpublic void test01() throws IOException {//1. 得到输入流对象InputStream inputStream = ResourceAsStream(l");//2. 创建会话工厂建造类SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//3. 通过建造类得到会话工厂类SqlSessionFactory factory = builder.build(inputStream);//4. 通过会话工厂得到会话对象SqlSession session = factory.openSession();//5. 会话对象得到UserMapper接口的代理对象UserMapper userMapper = Mapper(UserMapper.class);// 生成了代理对象:org.apache.ibatis.binding.MapperProxy@198b6731System.out.println(userMapper);//6. 执行查询操作List<User> users = userMapper.findAllUsers();for (User user : users) {System.out.println(user);}//7. 关闭会话session.close();}}
测试执行如下:
三大对象的声明周期
在Mybatis中一个会话相当于一次访问数据库的过程,一个会话对象类似于一个Connection连接对象。
SqlSessionFactoryBuilder:这是一个临时对象,用完就不需要了。通过这个工厂建造类来创建一个会话工厂。
SqlSessionFactory:从一个工厂类中得到一个会话对象,一个项目中只需要创建一个会话工厂对象即可。通过会话工厂对象来创建会话对象。
SqlSession:每次访问数据库都需要创建一个会话对象,这个会话对象不能共享。访问完成以后会话需要关闭。
MyBatis工作流程
CRUD:增删改查的操作(Create、Retrieve、Update、Delete)
Resources工具类直接可以读取 resources 目录下配置文件,转成输入流
步骤
通过框架提供的Resources类,加载l,得到文件输入流InputStream对象
实例化会话工厂创建类SqlSessionFactoryBuilder
通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory类
使用SqlSessionFactory对象,创建SqlSession对象
它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
它提供了一个getMapper()方法,获取接口的实现对象。
获取接口的对象UserMapper,得到接口的代理对象
执行数据库的查询操作,输出用户信息
关闭会话,释放资源
本文发布于:2024-01-28 06:12:50,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063935915378.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |