2. MyBatis入门案例

阅读: 评论:0

2. MyBatis入门案例

2. MyBatis入门案例

2. MyBatis入门案例

环境搭建

需求


利用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项目

image-20210309000024338

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

image-20210309000641653

4.创建日志记录的配置文件 log4j.properties

image-20210309000751197

用来设置日志记录的格式,因为Mybaits需要使用到log4j来记录它的日志

日志文件用来记录程序运行过程中的各种事件

5.编写用户dao接口和dao映射文件 (记得分包)

image-20210309003524947

6.编写用户的实体类文件

image-20210309003558279

7.编写测试代码

image-20210309001256332

项目整体结构

image-20210309003626903

3.2 配置文件和接口

3.2.1 日志文件

#1. 在resources下创建一个名为log4j.properties
#2. 作用: 记录MyBatis运行过程中的各种事件

代码

image-20210309003704285
### 设置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

3.2.2 核心配置文件l


# 1. 可以在Mybatis官网入门中找到配置模板.html
# 2. 在工程中的resources目录下创建一个名为l
# 3. 记得修改第15行的数据库名

代码


image-20210309003733033
<?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>

3.2.3 UserMapper接口

# 1. 在com.lijw.dao包下创建一个接口,名为UserMapper
# 2. 在接口中定义一个查询所有用户的方法

代码


image-20210309003821396
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();}

3.2.4 用户映射文件 l

# 1. 在 resources 目录下创建一个xml文件,名为l
# 2. 映射文件的模板地址.html

代码


image-20210309003926942
<?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>

3.2.5 实体类

# 1. 数据库表对应实体a. 属性名和user表中字段名一致# 2. 基本类型使用包装类b. 实体类中基本数据类型,都使用它的包装类。这样与表中的数据更加匹配c. 因为如果从数据库中读取不到对应的数据,应该是null比较合适int id;  //默认的值是0 Integer id; //默认是null

User类代码


image-20210309004004753
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;}....
}

3.3 测试类

# 1. 在com.lijw.dao下编写一个测试类: TestUserMapper
# 2. 然后运行: 查询到user表中所有数据

代码


image-20210309004114847
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();}}

测试执行如下:

image-20210309004211103

3.4 入门案例解释

三大对象的声明周期


在Mybatis中一个会话相当于一次访问数据库的过程,一个会话对象类似于一个Connection连接对象。

  1. SqlSessionFactoryBuilder:这是一个临时对象,用完就不需要了。通过这个工厂建造类来创建一个会话工厂。

  2. SqlSessionFactory:从一个工厂类中得到一个会话对象,一个项目中只需要创建一个会话工厂对象即可。通过会话工厂对象来创建会话对象。

  3. SqlSession:每次访问数据库都需要创建一个会话对象,这个会话对象不能共享。访问完成以后会话需要关闭。

MyBatis工作流程


CRUD:增删改查的操作(Create、Retrieve、Update、Delete)

Resources工具类直接可以读取 resources 目录下配置文件,转成输入流

1575558785104

步骤


  1. 通过框架提供的Resources类,加载l,得到文件输入流InputStream对象

  2. 实例化会话工厂创建类SqlSessionFactoryBuilder

  3. 通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory类

  4. 使用SqlSessionFactory对象,创建SqlSession对象

    1. 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法

    2. 它提供了一个getMapper()方法,获取接口的实现对象。

  5. 获取接口的对象UserMapper,得到接口的代理对象

  6. 执行数据库的查询操作,输出用户信息

  7. 关闭会话,释放资源

本文发布于:2024-01-28 06:12:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063935915378.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:入门   案例   MyBatis
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23