10.整和mybatis方式(1)
Mybatis-Spring网址:mybatis-spring –
步骤:
导入相关jar包
junit,
mybatis,
mysql数据库,
spring相关的,
aop织入
mybatis-spring 【new】
<?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>Spring-09-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--单元测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.13</version>
</dependency>
<!--aop植入包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--导入mybatis-Spring-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</project>
-
编写配置文件
-
测试
回顾Mybatis
-
编写实体类
-
编写核心配置文件
-
编写接口
-
编写Mapper.xml
-
测试
Mybatis-Spring
-
编写数据源配置
-
sqlSessionFactory
-
sqlSessionTemplate
-
需要给接口加实现类
-
将自己写的实现类,注入到Spring中,
-
测试使用
在 Spring 中,JDBC 的相关信息在配置文件中完成,其配置模板
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--数据库驱动-->
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<!--连接数据库的url-->
<property name= "url" value="jdbc:mysql://localhost/xx" />
<!--连接数据库的用户名-->
<property name="username" value="root" />
<!--连接数据库的密码-->
<property name="password" value="root" />
</bean>
<!--配置JDBC模板-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--默认必须使用数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置注入类-->
<bean id="xxx" class="xxx">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
...
</beans>
dataSource 定义了 4 个连接数据库的属性
| 属性名 | 说明 |
|---|---|
| driverClassName | 所使用的驱动名称,对应驱动 JAR 包中的 Driver 类 |
| url | 数据源所在地址 |
| username | 访问数据库的用户名 |
| password | 访问数据库的密码 |
在 JdbcTemplate 类中,提供了大量的查询和更新数据库的方法,如 query()、update() 等,如下表所示。
| 方法 | 说明 |
|---|---|
| public int update(String sql) | 用于执行新增、修改、删除等语句 args 表示需要传入到 query 中的参数 |
| public int update(String sql,Object... args) | 用于执行新增、修改、删除等语句 args 表示需要传入到 query 中的参数 |
| public void execute(String sql) | 可以执行任意 SQL,一般用于执行 DDL 语句 action 表示执行完 SQL 语句后,要调用的函数 |
| public T execute(String sql, PreparedStatementCallback action) | 可以执行任意 SQL,一般用于执行 DDL 语句 action 表示执行完 SQL 语句后,要调用的函数 |
| public T query(String sql, ResultSetExtractor rse) | 用于执行查询语句 以 ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型 以 RowMapper 作为参数的 query 方法返回值为 List |
| public List query(String sql, RowMapper rse) | 用于执行查询语句 以 ResultSetExtractor 作为参数的 query 方法返回值为 Object,使用查询结果需要对其进行强制转型 以 RowMapper 作为参数的 query 方法返回值为 List |
接口 StudentMapper
public interface StudentMapper {
public List<Student> list();
}
实体类
package com.yuan.pojo;
public class Student {
private long stuId;
private String stuName;
private String stuemail;
private String stuPhone;
public Student() {
}
public Student(long stuId, String stuName, String stuemail, String stuPhone) {
this.stuId = stuId;
this.stuName = stuName;
this.stuemail = stuemail;
this.stuPhone = stuPhone;
}
public long getStuId() {
return stuId;
}
public void setStuId(long stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuemail() {
return stuemail;
}
public void setStuemail(String stuemail) {
this.stuemail = stuemail;
}
public String getStuPhone() {
return stuPhone;
}
public void setStuPhone(String stuPhone) {
this.stuPhone = stuPhone;
}
}
实现类:StudentMapperImpl
package com.yuan.mapper.impl;
import com.yuan.mapper.StudentMapper;
import com.yuan.pojo.Student;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
public class StudentMapperImpl implements StudentMapper {
//我们的所有操作,都使用sqLSession来执行,在原来,现在都使用sqLSessionTemplate;
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
public List<Student> list() {
StudentMapper mapper = sqlSessionTemplate.getMapper(StudentMapper.class);
return mapper.list();
}
}
applicationContext.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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--DataSource:使用Spring的数据源替换Mybatis的配置c3pedbcp druid-->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!-- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="root"/>-->
<!-- </bean>-->
<!-- <!--或者 1.配置Spring管理数据源(DBCP) destroy-method=”close”的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用 -->-->
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--sqLsessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--*代表以xml结尾的所有文件-->
<property name="mapperLocations" value="com.yuan.mapper/*.xml"/>
</bean>
<!--sqLsessionTemplate:就是我们使用的sqLSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能使用构造器注入sqLSessionFactory,因为它没有set方法-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--如果用来SqlSessionDaoSupport 这一步可以省略-->
<bean id="studentMapper" class="com.yuan.mapper.impl.StudentMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
</beans>
beans-dao.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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<import resource="applicationContext.xml"/>
fsd
<!--第二种-->
<bean id="studentMapperImpl2" class="com.yuan.mapper.impl.StudentMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
mybatis-config.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>
<!--打印日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--起别名-->
<typeAliases>
<package name="com.yuan.pojo"/>
</typeAliases>
</configuration>
StudentMapper.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">
<!--namespace=绑定一个对应的Mapper接口-->
<mapper namespace="com.yuan.mapper.StudentMapper">
<select id="list" resultType="Student">
select * from student;
</select>
</mapper>
测试类
public class Mytest {
@Test
public void Mytest() throws IOException {
ApplicationContext context= new ClassPathXmlApplicationContext("beans-dao.xml");
StudentMapper studentMapper = context.getBean("studentMapper", StudentMapper.class);
System.out.println("名称\t手机号\t邮箱");
for (Student student : studentMapper.list()) {
System.out.println(student.getStuName()+"\t"+student.getStuPhone()+"\t"+student.getStuemail());
}
}
}
方式二
StudentMapperImpl2
public class StudentMapperImpl2 extends SqlSessionDaoSupport implements StudentMapper {
public List<Student> list() {
return getSqlSession().getMapper(StudentMapper.class).list();
}
}
beans-dao.xml
<bean id="studentMapperImpl2" class="com.yuan.mapper.impl.StudentMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>