JAVA架构(五)-------访问数据库之整合mybatis框架
⦁ 访问数据库
⦁ 整合MyBatis框架
⦁ 引入关于Mybatis的starter
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
⦁ 在用户类使用Mybatis别名
package com.springboot.mybatis.pojo;
import org.apache.ibatis.type.Alias;
import com.springboot.mybatis.enumeration.SexEnum;
@Alias(value = "user") // Mybatis 指定别名
public class User {
private Long id = null;
private String userName = null;
private String note = null;
// 性别枚举,这里需要使用typeHandler进行转换
private SexEnum sex = null;
public User() {
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
}
⦁ 性别枚举类
package com.springboot.mybatis.enumeration;
public enum SexEnum {
MALE(1, "男"), FEMALE(2, "女");
private int id;
private String name;
public static SexEnum getEnumById(int id) {
for(SexEnum sex:SexEnum.values()) {
if(sex.getId()==id) {
return sex;
}
}
return null;
}
private SexEnum(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
⦁ 性别typeHandler
package com.springboot.mybatis.typehandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import com.springboot.mybatis.enumeration.SexEnum;
//声明JdbcType 为整型
@MappedJdbcTypes(JdbcType.INTEGER)
// 声明JavaType为SexEnum
@MappedTypes(value = SexEnum.class)
public class SexTypeHandler extends BaseTypeHandler<SexEnum> {
// 通过列明读取性别
@Override
public SexEnum getNullableResult(ResultSet rs, String col) throws SQLException {
int sex = rs.getInt(col);
if (sex != 1 && sex != 2) {
return null;
}
return SexEnum.getEnumById(sex);
}
// 通过下标读取性别
@Override
public SexEnum getNullableResult(ResultSet rs, int index) throws SQLException {
int sex = rs.getInt(index);
if (sex != 1 && sex != 2) {
return null;
}
return SexEnum.getEnumById(sex);
}
// 通过存储过程读取性别
@Override
public SexEnum getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
}
// 设置非空性别参数
@Override
public void setNonNullParameter(PreparedStatement ps, int index, SexEnum sex, JdbcType jdbcType)
throws SQLException {
ps.setInt(index, sex.getId());
}
}
⦁ 用户映射文件(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.springboot.mybatis.dao.MybatisUserDao">
<select id="getUser" parameterType="long" resultType="user">
select id, user_name as userName, sex, note from t_user where id = #{id}
</select>
</mapper>
⦁ 定义MyBatis操作接口
package com.springboot.mybatis.dao;
import org.springframework.stereotype.Repository;
import com.springboot.mybatis.pojo.User;
@Repository
public interface MybatisUserDao {
public User getUser(Long id);
}
⦁ 服务层接口及实现类
package com.springboot.mybatis.service;
import com.springboot.mybatis.pojo.User;
public interface MyBatisUserService {
public User getUser(Long id);
}
package com.springboot.mybatis.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.mybatis.dao.MybatisUserDao;
import com.springboot.mybatis.pojo.User;
import com.springboot.mybatis.service.MyBatisUserService;
@Service
public class MyBatisUserServiceImpl implements MyBatisUserService {
@Autowired
private MybatisUserDao mybatisUserDao = null;
@Override
public User getUser(Long id) {
return mybatisUserDao.getUser(id);
}
}
⦁ 使用控制器测试Mybatis接口
package com.springboot.mybatis.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springboot.mybatis.pojo.User;
import com.springboot.mybatis.service.MyBatisUserService;
import com.springboot.mybatis.service.impl.MyBatisUserServiceImpl;
@Controller
@RequestMapping("/mybatis")
public class MyBatisController {
@Autowired
private MyBatisUserService myBatisUserService;
@RequestMapping("/getUser")
@ResponseBody
public User getUser(Long id) {
return myBatisUserService.getUser(id);
}
}
⦁ Spring Boot 的主类
package com.springboot.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Repository;
//定义Mybatis的扫描
@MapperScan(basePackages = "com.springboot.mybatis.dao", annotationClass = Repository.class)
//定义Spring Boot扫描包路径
@SpringBootApplication(scanBasePackages = { "com.springboot.mybatis" })
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
⦁ 配置文件
#配置数据源
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定数据库连接池类型
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
#最大等待连接中的数量,设0为没有限制
spring.datasource.dbcp2.max-idle=10
#最大连接活动数
spring.datasource.dbcp2.max-total=50
#最大等待毫秒数,单位为ms,超过时间会出错信息
spring.datasource.dbcp2.max-wait-millis=10000
#数据库连接池初始化连接数
spring.datasource.dbcp2.initial-size=5
#MyBatis 映射文件通配
mybatis.mapper-locations=classpath:com/springboot/mybatis/mapper/*.xml
#MyBatis扫描别名包,和注解@Alias连用
mybatis.type-aliases-package=com.springboot.mybatis.pojo
#配置typeHandler的扫描
mybatis.type-handlers-package=com.springboot.mybatis.typehandler
#日志配置
logging.level.root=DEBUG
logging.level.org.springframework=DEBUG
logging.level.org.org.org.mybatis=DEBUG
⦁ 访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统