各位大家好,今天我给大家阐述一下MyBaits的开发流程,以及它的一些面试题,如有错误,请大家积极指正,下面我开始介绍一下MyBatis:
MyBatis的简介:
- 是由半自动化的ORM实现
- 操作的是DAO层(数据访问层)
- 能够书写动态SQL
- 小巧灵活,简单易学
MyBatis的开发流程:
-
通过Maven导入mybatis依赖
-
编写MyBatis核心配置文件(mybatis-config.xml)
-
创建实体类-POJO、编写UserMapper.java接口
-
创建DAO层(mapper )-SQL映射文件(UserMapper.xml)
-
创建工具类MybatisUtils.java
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象
创建getSqlSession方法
-
使用Junit进行测试
创建SqlSession对象
调用mapper文件进行数据操作
//1.通过Maven导入mybatis依赖
//通过这个maven仓库去找依赖,https://mvnrepository.com/
//三个依赖:mysql、mybatis、junit
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
//2.编写MyBatis核心配置文件
//mybatis-config.xml,官网提供的名字。
//在资源文件resources目录下,创建mybatis-config.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 数据库环境 1、开发环境 2、测试环境 3、生产环境-->
<environments default="dev">
<environment id="dev">
<!--事务管理 采用JDBC的事务管理机制-->
<transactionManager type="JDBC" />
<!--数据源配置信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/news_db?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--映射器-->
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
1.存数据时
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
2.取数据时
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
#### 3.创建实体类-POJO、创建Dao层,编写接口文件
实体类
package cn.hxzy.pojo;
public class User {
private Integer userId;
private String userName;
private String userPwd;
private Integer userGender;
public User() {
}
public User(Integer userId, String userName, String userPwd, Integer userGender) {
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
this.userGender = userGender;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public Integer getUserGender() {
return userGender;
}
public void setUserGender(Integer userGender) {
this.userGender = userGender;
}
}
定义接口文件的后缀名为Mapper,UserMapper.java。
package cn.hxzy.dao;
import cn.hxzy.pojo.User;
import java.util.List;
/**
* 用户的Mapper接口文件
*/
public interface UserMapper {
/**
* 查询全部用户信息
* @return 用户集合
*/
List<User> getUserList();
}
#### 4.编写-SQL映射文件
在resources资源目录下,创建一个专门用于mapper文件的管理目录,在mapper文件夹下,创建与接口文件保持一致的SQL映射文件
UserMapper.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace-->
<mapper namespace="cn.hxzy.dao.UserMapper">
<select id="getUserList" resultType="cn.hxzy.pojo.User">
select * from user
</select>
</mapper>
maven的强大体现在有个特性叫做依赖传递。
#### 5.创建工具类MybatisUtils.java
为了减少代码量,提高系统性能,把公共的操作封装在一起,方便代码的管理。
package cn.hxzy.utils;
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.IOException;
import java.io.InputStream;
public class MybatisUtils {
//静态的属性,是属于类级别
public static SqlSessionFactory factory = null;
static { //只在类加载的时候,执行一次
String resource = "mybatis-config.xml"; //读取核心配置文件mybatis-config.xml
InputStream is = null;
try {
is = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
factory = new SqlSessionFactoryBuilder().build(is); //创建SqlSessionFactory对象
}
public static SqlSession creatSqlSession() {//创建creatSqlSession方法
return factory.openSession();
}
}
#####6.代码测试
package cn.hxzy.dao;
import cn.hxzy.pojo.User;
import cn.hxzy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest1 {
@Test
public void getUserList() throws Exception{
SqlSession sqlSession = MybatisUtils.creatSqlSession(); //创建SqlSession对象
UserMapper userMapper =sqlSession.getMapper(UserMapper.class);//反射 调用mapper文件进行数据操作
List<User> userList = userMapper.getUserList();
for (User user:userList) {
System.out.println(user.getUserId()+"=="+user.getUserName());
}
sqlSession.close();
}
@Test
public void getUser(){
SqlSession sqlSession = MybatisUtils.creatSqlSession(); //创建SqlSession对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//调用mapper文件进行数据操作
User user = userMapper.getUser(12);
System.out.println(user.getUserId()+"==="+user.getUserName());
sqlSession.close();
}
}
MyBatis的相关面试题(3道):
1、什么是Mybatis?
MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis可以通过XML、注解来配置映射信息,将java对象映射到数据库,或将数据库信息映射到java中。
MyBatis同时也是半自动ORM映射工具,在查询关联对象或关联集合对象时,需要手动编写SQL语句来完成。
2、MyBatis的优缺点?
优点:
与传统数据库相比,半自动ORM优点:
- 基于SQL语句编程,相对灵活
- 封装在配置文件中,解除了SQL与程序代码的耦合(耦合度降低),便于管理,可以重复使用SQL
与JDBC相比:
- 消除了JDBC大量冗余的代码,不需要手动连接
其他:
- 提供了映射标签,支持对象与数据库的ORM关系映射,支持对象关系间组件的维护
- 能与Spring有很好的集成
缺点:
- SQL语句 的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
- SQL语句依赖与数据库,导致数据库移植性差,不能随意更换数据库
#{}与${}有什么区别:
- #{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理
- #{}可以有效的防止SQL注入,提高代码的安全性;${}不能防止SQL注入
- #{}的变量替换在DBMS中;${}的变量替换在DBMS外
我今天分享的内容结束,欢迎大家来提提建议。。。