1.首先我们需要创建一个基于Maven的java项目
2.在数据库中创建一张表及在idea中创建对应实体类
package com.ffyc.mybatisdemo.model;
public class Admin {
private int id;
private String account;
private String password;
private String xb;
private String adminPhone;
public String getXb() {
return xb;
}
public void setXb(String xb) {
this.xb = xb;
}
public String getAdminPhone() {
return adminPhone;
}
public void setAdminPhone(String adminPhone) {
this.adminPhone = adminPhone;
}
public Admin() {
System.out.println("Admin无参构造");
}
public Admin(String account, String password, String gender) {
this.account = account;
this.password = password;
this.xb = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
System.out.println("SetId");
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Admin{" +
"id=" + id +
", account='" + account + '\'' +
", password='" + password + '\'' +
", xb='" + xb + '\'' +
", adminPhone='" + adminPhone + '\'' +
'}';
}
}
-
注:
-
我们在创建实体类时尽量保证属性名与数据库中的字段名相同
-
在实体类中一定要给私有属性提供公共的get()和set()方法
-
保证类中有无参构造方法
-
3.在pom.xml中导入Mybatis jar包,数据库驱动包
Mybatis在Maven仓库中的项目坐标如下:
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
数据库驱动包在Maven仓库中的项目坐标如下:
<!--mysql-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
4.创建外部配置文件保存jdbc连接信息
我们将此文件命名为config.properties
driverName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
username=root
password=111
-
注:
-
此处为键值对封装,所以配置属性文件中并没有双引号此处应特别注意
-
5.创建AdminMapper.xml SQL映射文件
我们创建SQL映射文件后要在全局配置文件中进行注册,之后在此文件中进行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">
<mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
</mapper>
-
注:
-
此处开发时我们应该遵循接口开发规范:
-
1.此处的namespace命名空间与dao所在目录一致
-
id与dao中所需抽象方法名一致
-
方法名与对应的mapper中的标签id一致
-
方法参数,返回值类型与mapper中标签定义的参数烈性返回值一致
-
-
6.创建全局配置文件
全局配置文件用于配置数据库的连接信息,此处我们一次将后续经常使用的配置直接进行配置
<?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全局配置文件-->
<!--读入属性文件-->
<properties resource="config.properties"></properties>
<!--全局配置-->
<settings>
<!--日志功能-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--从经典的数据库命名转为java的驼峰命名-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启全局二级缓存-->
<setting name="cacheEnabled" value="true"></setting>
</settings>
<!--配置类型别名-->
<typeAliases>
<!--<typeAlias type="com.ffyc.mybatisdemo.model.Admin" alias="Admin"></typeAlias>-->
<package name="com.ffyc.mybatisdemo.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<!--事物管理使用配置文件默认的 事物是一次对数据操作过程的管理,必须是满足原子性特能-->
<transactionManager type="JDBC"/>
<!--是否使用数据库连接池功能-->
<dataSource type="POOLED">
<property name="driver" value="${driverName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--注册SQL映射文件-->
<mappers>
<mapper resource="mappers/AdminMapper.xml"/>
</mappers>
</configuration>
-
注:
-
在此处我们需要在<properties>标签中导入我们的属性文件以用来获取数据库连接
-
必须在<mappers>标签中注册对应的SQL映射文件,每一个mapper文件都必须在全局配置文件中进行注册
-
开启日志功能之后Mybatis会自动帮我们打印日志信息
-
为我们的自定义类配置类型别名之后,我们在编写时就可以不用每次都编写全类名,直接写别名即可
-
7.编写dao
我们需要将dao创建为一个接口,并在其中编写所需抽象方法
package com.ffyc.mybatisdemo.dao;
import com.ffyc.mybatisdemo.model.Admin;
import org.apache.ibatis.annotations.Param;
public interface AdminDao {
Admin findAdminById(int id);
}
8.编写测试类
package com.ffyc.mybatisdemo.test;
import com.ffyc.mybatisdemo.dao.AdminDao;
import com.ffyc.mybatisdemo.model.Admin;
import com.ffyc.mybatisdemo.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws IOException {
//创建SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
// Admin admin = sqlSession.selectOne("com.ffyc.admin.findAdminById", 1);
//动态生成一个代理对象(mybatis框架生成),由代理对象去调用mapper文件中的方法
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = adminDao.findAdminById(1);
System.out.println(admin);
sqlSession.close();
}
}
-
注:
-
此处由于SqlSessionFactory创建的开销比较大,且是用于封装数据库的连接信息,所以我们没有必要在每个测试中都创建一次.因此我们直接将创建SQLSessionFactory的部分封装到一个Util类中,这样我们整个项目只有在第一次创建SQLSessionFactory,之后的使用过程中直接调用Util方法创建SQLSession即可.
package com.ffyc.mybatisdemo.util; 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 MybatisUtil { static SqlSessionFactory sqlSessionFactory = null; static{ //读取mybatis全局配置文件 InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream("mybatisConfig.xml"); } catch (IOException e) { e.printStackTrace(); } //创建SqlSessionFactory.由于SQLSessionFactory创建开销大,用于封装数据库连接信息,所以没有必要每次创建 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
-