目录
1.项目结构
先看一眼项目整体结构
下面正式开始
2.在pom.xml中导入需要的包
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybatis1</artifactId>
<version>1.0-SNAPSHOT</version>
<name>mybatis1</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring核心ioc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--阿里公司的数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--mybatis和spring集成的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--spring操作数据库需要用到的-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
</project>
注:复制过去注意更改上面的项目名和包名
3.创建实体类及服务类及数据库操作
学生实体类
注:是在entity包下哦
Student.java
package org.example.entity;
public class Student {
private String num;
private String name;
private String password;
public Student(String num, String name, String password) {
this.num = num;
this.name = name;
this.password = password;
}
public Student() {
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Student{" +
"num='" + num + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
服务类
注:是在service包下
StuService.java接口文件
package org.example.service;
import org.example.entity.Student;
import java.util.List;
public interface StuService {
int addStu(Student student);
List<Student> allStu();
}
StuServiceImpl.java接口实现类
package org.example.service;
import org.example.dao.StuDao;
import org.example.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StuServiceImpl implements StuService {
@Autowired
private StuDao stuDao;
@Override
public int addStu(Student student) {
return stuDao.add(student);
}
@Override
public List<Student> allStu() {
List<Student> students = stuDao.allStudent();
return students;
}
}
@Service 声明这是一个服务类 ,注册到spring容器中
这里stuDao使用了自动装配,spring会自动匹配数据类型,(下面使用MapperScannerConfigurer代理扫描所有的接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao对象。把所有的dao对象都配置成了Bean)。
数据库操作类
StuDao.java
package org.example.dao;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.example.entity.Student;
import java.util.List;
public interface StuDao {
@Insert("insert into info value (#{num},#{name},#{password})")
int add(Student student);
@Select("select * from info")
List<Student> allStudent();
}
4.注解配置Bean
SpringConfig.java
package org.example.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
@Configuration
@ComponentScan("org.example")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}
- @Configuration告诉spring这是一个配置类
- @ComponentScan("org.example") 扫描这个包下所有的,将写有注解@Component、@Repository、@Service、@Controller的类作为作为Bean注册到spring容器中。
- @PropertySource("classpath:jdbc.properties") 加载properties文件
- @Import({JdbcConfig.class,MybatisConfig.class}) 导入JdbcConfig,MybatisConfig配置类
properties文件
jdbc.driver=com.mysql.jdbc.Driver #?serverTimezone=UTC防止高版本时区报错 jdbc.url=jdbc:mysql://localhost:3306/Student?serverTimezone=UTC jdbc.username=root jdbc.password=123456
5.配置第三方Bean(阿里的连接池配置)
JdbcConfig.java
package org.example.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource ds= new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
- @Value("${jdbc.driver}")private String driver; 把properties文件中的jdbc.dricer的值注给driver
- @Bean 把dataSource类作为Bean注册到spring容器中
6.Mybatis的配置
MybatisConfig.java
package org.example.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setTypeAliasesPackage("org.eanmple.entity");
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("org.example.dao");
return msc;
}
}
- msc.setBasePackage("org.example.dao");扫描这个包下所有的接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao对象。把所有的dao对象都配置成了Bean
7.测试类,运行测试
AppTest.java
package org.example;
import static org.junit.Assert.assertTrue;
import org.example.config.SpringConfig;
import org.example.entity.Student;
import org.example.service.StuService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
public class AppTest
{
@Test
public void test1()
{
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
StuService stuService =ctx.getBean(StuService.class);
Student student =new Student("1003","张三","123456");
int i = stuService.addStu(student);
System.out.println(i+"行受影响");
List<Student> students = stuService.allStu();
for (Student stu:students) {
System.out.println(stu);
}
}
}
测试结果
到这里就是一个简单的整合Mybatis的案例。