需要的lib文件如下
image.png
使用xml
包結(jié)構(gòu)
image.png
spring xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.ly1.service"/>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test1"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="test.lwm"/>
</bean>
<bean id="personMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.ly1.mapper.PersonMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
如上圖企锌,先配置一個sqlSessionFactoryBean,然后配置數(shù)據(jù)庫BasicDataSource扼雏,最后配置Mapper(MapperFactoryBean)
其他,Person是實體類
Mapper是mybatis需要的接口,如圖
public interface PersonMapper {
@Select(value = "SELECT * FROM person where id = #{id} " )
Person getPerson(Person person);
}
Service是服務(wù)類
@Service
public class PersonServiceImpl implements PersonService{
private final PersonMapper personMapper;
public PersonServiceImpl(PersonMapper personMapper) {
this.personMapper = personMapper;
}
public Person getPerson(Person person) {
return personMapper.getPerson(person);
}
}
Main測試類燕锥,獲取context子刮,取得服務(wù)類威酒,然后調(diào)用getPerson方法
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("com/ly1/ly-config-context.xml");
// ApplicationContext context=new AnnotationConfigApplicationContext(LyConfig2.class);
PersonServiceImpl personService = context.getBean(PersonServiceImpl.class);
Person person = new Person();
person.setId("1");
long startTime = System.currentTimeMillis();
Person person1 = personService.getPerson(person);
long endTime = System.currentTimeMillis();
//第一次查詢比較耗時 2337毫秒
System.out.println("花費了[" + (endTime - startTime) + "]毫秒");
System.out.println(person1);
person.setId("2");
startTime = System.currentTimeMillis();
Person person2 = personService.getPerson(person);
endTime = System.currentTimeMillis();
//4毫秒
System.out.println("花費了[" + (endTime - startTime) + "]毫秒");
System.out.println(person2);
}
}
使用java注解配置(相比上面去掉了spring-context.xml文件)
如圖
image.png
service,mapper挺峡,和entity包內(nèi)的文件沒有任何變動
先看Main測試類,相比上述的代碼葵孤,僅僅是改變了context獲取方式而已
// ApplicationContext context = new ClassPathXmlApplicationContext("com/ly1/ly-config-context.xml");
ApplicationContext context=new AnnotationConfigApplicationContext(LyConfig2.class);
主要看Config.java類,有三種寫法
第一種寫法
與xml配置幾乎一致橱赠,沒有變動尤仍,只不過使用形式不同
/**
* 這里使用注解,基本和xml一致
*/
@Configuration
@ComponentScan(basePackages = "com.ly1.service")
public class LyConfig {
@Bean
public MapperFactoryBean<PersonMapper> personMapper() throws Exception {
MapperFactoryBean<PersonMapper> factoryBean=new MapperFactoryBean<PersonMapper>();
factoryBean.setSqlSessionFactory(sqlSessionFactory());
factoryBean.setMapperInterface(PersonMapper.class);
return factoryBean;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
return sqlSessionFactoryBean.getObject();
}
@Bean
public BasicDataSource dataSource(){
BasicDataSource dataSource=new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test1");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("test.lwm");
return dataSource;
}
}
第二種寫法
直接使用MapperScan,不需要進行配置狭姨,會自動掃描
@Configuration
@ComponentScan(basePackages = {"com.ly1.service","com.ly1.mapper"})
@MapperScan(value = {"com.ly1.mapper"})
public class LyConfig1 {
/*@Bean
public MapperFactoryBean<PersonMapper> personMapper() throws Exception {
MapperFactoryBean<PersonMapper> factoryBean=new MapperFactoryBean<PersonMapper>();
factoryBean.setSqlSessionFactory(sqlSessionFactory());
factoryBean.setMapperInterface(PersonMapper.class);
return factoryBean;
}*/
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
return sqlSessionFactoryBean.getObject();
}
/*@Bean
public PersonMapper personMapper() throws Exception {
SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(sqlSessionFactory());
final PersonMapper personMapper = sqlSessionTemplate.getMapper(PersonMapper.class);
return personMapper;
}*/
@Bean
public BasicDataSource dataSource(){
BasicDataSource dataSource=new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test1");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("test.lwm");
return dataSource;
}
}
第三種寫法
@Configuration
@ComponentScan(basePackages = {"com.ly1.service","com.ly1.mapper"})
//@MapperScan("com.ly1.mapper")
public class LyConfig2 {
/*
//方法a1 使用該方法則不需要像下面的方法需要提前注冊Mapper類
//the mapper is not autoregistered so it must appear in the mybatis-config or it can be registered by calling config.addMapper()
@Bean
public MapperFactoryBean<PersonMapper> personMapper() throws Exception {
MapperFactoryBean<PersonMapper> factoryBean=new MapperFactoryBean<PersonMapper>();
factoryBean.setSqlSessionFactory(sqlSessionFactory());
factoryBean.setMapperInterface(PersonMapper.class);
return factoryBean;
}*/
//方法a2
@Bean
public PersonMapper personMapper() throws Exception {
SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(sqlSessionFactory());
final PersonMapper personMapper = sqlSessionTemplate.getMapper(PersonMapper.class);
return personMapper;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
//如果使用上面的方法宰啦,拿sqlSessionTemplate.getMapper,必須先注冊Mapper類,如下兩種方法
/*
//方法b1
org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();
configuration.addMapper(PersonMapper.class);
sqlSessionFactoryBean.setConfiguration(configuration);*/
//方法2
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("com/ly1/ly-config-mybatis.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public BasicDataSource dataSource(){
BasicDataSource dataSource=new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test1");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("test.lwm");
return dataSource;
}
}
注意鲤嫡,這里手動設(shè)置了personMapper類,獲取之前是需要先加進去的绑莺,添加方法為注釋掉的方法b1和沒有主食的方法b2暖眼,
方法b1
org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();
configuration.addMapper(PersonMapper.class);
sqlSessionFactoryBean.setConfiguration(configuration);
方法b2
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("com/ly1/ly-config-mybatis.xml"));
ly-config-mybatis.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>
<mappers>
<mapper class="com.ly1.mapper.PersonMapper" />
</mappers>
</configuration>
其實也只是在config文件中添加了mapper