1. 数据库新建表
CREATE TABLE `table_emp`(
id INT AUTO_INCREMENT,
emp_name CHAR(100),
age INT,
emp_salary DOUBLE(10,5),
PRIMARY KEY(id)
);
INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("tom",18,200.33);
INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("jerry",19,666.66);
INSERT INTO `table_emp`(emp_name,age,emp_salary) VALUES("andy",20,777.77);
2. 数据库表模型Bean
@Data
public class Emp {
private Integer id;
private String empName;
private Integer age;
private Double empSalary;
}
3. 导入sql依赖
在pom.xml中添加依赖
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
4. 数据库配置
在 application.properties 中新增配置
spring.application.name=mybatis-01-helloworld
spring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/harrylin
spring.datasource.username=root
spring.datasource.password=******
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
5. JdbcTemplate的实现方法
5.1 编写Dao接口
public interface EmpDao {
Emp getEmpDaoById(Integer id);
}
5.2 编写接口实现类
此处通过sql查询出来的结果是通过jdbcTemplate的queryForObject方法完成类和结果的映射,其中类是由方法入参Emp.class决定。
@Repository
public class EmpDaoImpl implements EmpDao {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public Emp getEmpDaoById(Integer id) {
String sql = "select * from table_emp where id = ?";
Emp emp = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Emp.class), id);
return emp;
}
}
6. MyBatis的实现方法
6.1 导入mybatis依赖
在pom.xml中添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
6.1 编写mapper接口
注意,此处接口注解有别于JdbcTemplate接口注解,需标注@Mapper,而非@Repository
@Mapper // 告诉Spring 这是myBatis操作数据库用的接口
public interface EmpMapper { // Mapper接口
// 按照id查询
Emp getEmpById(Integer id);
}
6.2 编写mapper.xml实现
此文件可通过安装mybatisX插件
然后把光标停留在mapper接口处,Alt+enter 自动生成mapper.xml文件,文件头自动生成。
此处通过sql查询出来的结果和类之间的映射是mybatis完成,类是由mapper.xml配置中的
resultType全命名类决定的
<?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.hongshan.mybatis.mapper.EmpMapper">
</select>
<select id="getAllEmp" resultType="com.hongshan.mybatis.bean.Emp">
select * from table_emp
</select>
</mapper>
6.3 编写配置
在配置文件 application.properties 中新增配置
# 告诉 mybatis xml 文件在哪里
mybatis.mapper-locations=classpath:mapper/**.xml
# 驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true
7. 测试
这里自动注入时二者也有区别,JdbcTemplate使用的是实现类注入,
而mybatis是直接用的mapper接口注入
@SpringBootTest
class Mybatis01HelloworldApplicationTests {
@Autowired
EmpMapper mapper;
@Autowired
EmpDao empDao;
@Test
void getEmpById_test() {
Emp empById = mapper.getEmpById(1);
System.out.println(empById);
}
@Test
void getDaoEmpById_test(){
Emp empDaoById = empDao.getEmpDaoById(1);
System.out.println(empDaoById);
}
}