MyBatis入门
2020-05-15 本文已影响0人
凡哥爱丽姐
1、MyBatis框架
MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate(全自动化框架),性能优越,并且小巧,简单,易学,应用也越来越广泛。
1.1、MyBatis框架的优点
(1)MyBatis是最简单的持久化框架,简单易学。
(2)MyBatis相当灵活,不会对应用程序或者数据库的设计有影响,SQL写在XML里,从程序代码中彻底分离,既降低耦合度,又便于统一管理与优化。
(3)提供XML标签,支持编写动态SQL语句。
(4)提供映射标签,支持对象与数据库的ORM字段关系映射。
1.2、MyBatis框架的缺点
(1)SQL语句的编写工作量大,对开发人员编写SQL语句的功底又一定的要求。
(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更改数据库。
2、搭建MyBatis
以下环境的搭建和配置都是基于IDEA编辑器下的Maven项目,数据库使用的是MySql。
2.1、在pom.xml中添加驱动的jar包(mysql.jar和mybatis.jar包)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
2.2、在resources资源库中创建MyBatis的核心配置文件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">
<configuration>
<!--配置mybatis多套运行环境-->
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理-->
<transactionManager type="JDBC"/>
<!--POOLED:mybatis自带的数据源-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
<property name="url" value="${url}"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
<property name="username" value="${username}"/><!--数据库配置时的用户名-->
<property name="password" value="${password}"/><!--数据库配置时的密码-->
</dataSource>
</environment>
</environments>
<!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
<mappers>
<mapper resource="包名/mapper文件名"></mapper>
</mappers>
</configuration>
2.3、创建实体类
2.4、创建接口类
2.5、添加mapper文件
注:在mapper文件中保存sql语句
<?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">
<!--namespace 表示命名空间,通常定义的格式是接口的完整路径-->
<mapper namespace="接口的完整路径">
<!--定义sql语句,sql语句结束后不要加分号-->
<!-- id是被调用的方法名 mapper文件中读取参数的格式:#{属性名} -->
<insert id="方法名">
//sql语句
</insert>
<!--查询语句中需添加一个结果映射属性:resultType="一般是结果类型的完整路径"-->
<select id="方法名" resultType="查询后返回值类型">
//sql语句
</select>
</mapper>
2.6、获取SqlSession,创建测试类
//1.加载配置文件
Reader resourceAsReader=Resources.getResourceAsReader("mybatis-config.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
//3.得到session工厂
SqlSessionFactory factory=builder.build(resourceAsReader);
//4.得到session
SqlSession sqlSession= factory.openSession();
//5.调取sql语句,insert("方法的完整路径"),路径=namespace+id
int rs=sqlSession.insert("方法的完整路径" ,e);
//6.一般增、删、改需提交事务才可以实现数据库的更改
sqlSession.commit();
//7.关闭资源(放在finally中,应该添加非空验证)
sqlSession.close();
3、MyBatis一个简单的实现(实现用户数据的添加)
3.1、数据库准备
创建一个数据库名为test,表名为users
CREATE TABLE users(
id INT PRIMARY KEY,
NAME VARCHAR(20),
sex VARCHAR(20)
)
3.2、项目整体架构
项目整体架构3.3、添加驱动的jar包
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
3.4、MyBatis的核心配置文件mybatis-config.xml
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理-->
<transactionManager type="JDBC"/>
<!--POOLED:mybatis自带的数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
<property name="url" value="jdbc:mysql://localhost:3306/test"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
<property name="username" value="..."/><!--数据库配置时的用户名-->
<property name="password" value="..."/><!--数据库配置时的密码-->
</dataSource>
</environment>
</environments>
<!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
<mappers>
<mapper resource="Mapper/UserDaoMapper.xml"></mapper>
</mappers>
3.5、User实体类
package com.fan.entity;
public class User {
private Integer id;
private String name;
private String sex;
public User() {
}
public User(Integer id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3.6、UserDao接口类
package com.fan.dao;
import com.fan.entity.User;
public interface UserDao {
//新增用户
public int addUser(User user);
}
3.7、UserMapper.xml文件
<?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.fan.dao.UserDao">
<insert id="addUser">
insert into users(id,name,sex) values(#{id},#{name},#{sex})
</insert>
</mapper>
3.8、测试类
import com.fan.entity.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.IOException;
import java.io.Reader;
public class Demo1 {
public static void main(String[] args) {
Reader resourceAsReader=null;
SqlSession sqlSession=null;
try {
User user=new User(1,"张三","男");
resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(resourceAsReader);
sqlSession = factory.openSession();
int i = sqlSession.insert("com.fan.dao.UserDao.addUser", user);
sqlSession.commit();
System.out.println("插入成功"+i+"条");
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
if(resourceAsReader!=null){
try {
resourceAsReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}