目录
部分我无法自动导入依赖jar在百度网盘中,自取
链接:https://pan.baidu.com/s/1A4xh8JqBDuZ9paOffA1aPg?pwd=7rpv
提取码:7rpv
导入相关依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-context-support</artifactId>-->
<!-- <version>4.0.3.RELEASE</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-aspects</artifactId>-->
<!-- <version>4.0.3.RELEASE</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-jdbc</artifactId>-->
<!-- <version>6.0.8</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-tx</artifactId>-->
<!-- <version>6.0.8</version>-->
<!-- </dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.mybatis</groupId>-->
<!-- <artifactId>mybatis-spring</artifactId>-->
<!-- <version>1.2.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.mchange</groupId>-->
<!-- <artifactId>c3p0</artifactId>-->
<!-- <version>0.9.5-pre10</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.9</version>
</dependency>
</dependencies>
我这里是有一部分依赖自动导入不了的,所有我就手动加了,而且依赖的版本要mybatis-spring的版本对应,否则会出现以下错误,类文件使用版本不一致的意思,
(1条消息) 类文件具有错误的版本 61.0, 应为 52.0的解决方法_追逐梦想永不停的博客-CSDN博客
: org/springframework/dao/support/DaoSupport has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
实体类
public class Student {
private String sno;
private String sname;
private String ssex;
private Integer sage;
private String sdept;
public Student() {
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage = sage;
}
public String getSdept() {
return sdept;
}
public void setSdept(String sdept) {
this.sdept = sdept;
}
@Override
public String toString() {
return "Student{" +
"sno='" + sno + '\'' +
", sname='" + sname + '\'' +
", ssex='" + ssex + '\'' +
", sage=" + sage +
", sdept='" + sdept + '\'' +
'}';
}
}
1.在学生信息表中完成查询操作
需求说明:
(1)根据整合步骤实现Spring和MyBatis的整合。
(2)查询出全部学生信息数据。
(3)直接注入 SqlSessionTemplate(或通过 SqlSessionDaoSupport)实现。
(4)使用C3P0数据库连接池完成上述操作。
2 .根据学生名称查询学生信息
需求说明:
(1)在第1题的基础上增加功能。
(2)增加按照学生名称模糊查询学生信息的功能。
(3)直接注入 SqlSessionTemplate(或通过 SqlSessionDaoSupport)实现。
(4) 使用Druid数据库连接池实现上述操作。
1.配置文件beans.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
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 引入属性文件 -->
<!-- <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />-->
<!-- <!–配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的–>-->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!-- <property name="driverClassName" value="${jdbc.driver}"/>-->
<!-- <property name="url" value="${jdbc.url}"/>-->
<!-- <property name="username" value="${jdbc.username}"/>-->
<!-- <property name="password" value="${jdbc.password}"/>-->
<!-- </bean>-->
<import resource="c3p0.xml"/>
<!-- <import resource="druid.xml"/>-->
<!-- <import resource="dbpc.xml"/>-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis-->
<property name="configLocation" value="classpath:MybatisConfig.xml"/>
<property name="mapperLocations" value="classpath:Mapper/*.xml"/>
</bean>
<!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--利用构造器注入-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="studentMapper" class="DAO.StudentMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
<!-- 采用MapperFactoryBean注册映射器-->
<!-- <bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!-- <property name="mapperInterface" value="DAO.StudentMapper"/>-->
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!-- </bean>-->
<!-- 注册接口类的bean,使得程序中可以用注解方式获取 -->
<!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
<!-- <property name="basePackage" value="DAO" />-->
<!-- </bean>-->
</beans>
这里可以自己配置数据源信息替换mybaits的数据源信息,也可以用c3p0,druid,配置好后引用即可

c3p0.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 http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />
<!-- 一、使用c3p0连接池注册数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 基础配置 -->
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 关键配置 -->
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="3"></property>
<!--连接池中保留的最小连接数。Default: 2 -->
<property name="minPoolSize" value="2"></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="15"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="3"></property>
<!-- 性能配置 -->
<!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
<property name="maxStatements" value="8"></property>
<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<property name="maxStatementsPerConnection" value="5"></property>
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800"></property>
</bean>
</beans>
druid.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 http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />
<!-- 一、使用druid数据库连接池注册数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 基础配置 -->
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 关键配置 -->
<!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 -->
<property name="initialSize" value="3" />
<!-- 最小连接池数量 -->
<property name="minIdle" value="2" />
<!-- 最大连接池数量 -->
<property name="maxActive" value="15" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="10000" />
<!-- 性能配置 -->
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 其他配置 -->
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,
执行validationQuery检测连接是否有效。 -->
<property name="testWhileIdle" value="true" />
<!-- 这里建议配置为TRUE,防止取到的连接不可用 ,申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->
<property name="testOnBorrow" value="true" />
<!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
<property name="testOnReturn" value="false" />
</bean>
</beans>
2.接口及其实现类
public interface StudentMapper {
List<Student> selectAll();
List<Student> selectNames(@Param("sname")String sname);
Student selectNameAndAge(@Param("sname")String sname, @Param("sage")int sage);
}
增加Dao接口的实现类;私有化sqlSessionTemplate
public class StudentMapperImpl implements StudentMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<Student> selectAll() {
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
return mapper.selectAll();
}
@Override
public List<Student> selectNames(String sname) {
return sqlSession.getMapper(StudentMapper.class).selectNames(sname);
}
@Override
public Student selectNameAndAge(String sname, int sage) {
return sqlSession.getMapper(StudentMapper.class).selectNameAndAge(sname,sage);
}
}
3.映射文件以及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>
<!--环境配置,加载类路径下的属性文件-->
<properties resource="db.properties"/>
<typeAliases>
<!--自动给pojo包下的实体类以首字母小写的类名作别名-->
<package name="pojo"/>
</typeAliases>
<!-- <environments default="development">-->
<!-- <environment id="development">-->
<!-- <transactionManager type="JDBC"/>-->
<!-- <!–数据库连接相关配置,db.properties文件中的内容–>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="${jdbc.driver}"/>-->
<!-- <property name="url" value="${jdbc.url}"/>-->
<!-- <property name="username" value="${jdbc.username}"/>-->
<!-- <property name="password" value="${jdbc.password}"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <!–引入映射文件–>-->
<!-- <mapper resource="Mapper/StudentMapper.xml"/>-->
<!-- </mappers>-->
</configuration>
注意,这里由于beans.xml配置了数据源信息,所有就不用在配置环境的内容了,否则会报以下错误
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'MyTest.StudentTest': Unsatisfied dependency expressed through field 'studentMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'DAO.StudentMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
<!DOCTYPE mapper
PUBLIC "-//mybatis.org.//DTD mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="DAO.StudentMapper">
<select id="selectAll" resultType="pojo.Student">
select * from student
</select>
<select id="selectNames" resultType="pojo.Student">
select * from student where sname like concat("%",#{sname},"%")
</select>
<select id="selectNameAndAge" resultMap="SNameAndAge">
select * from student where sname like concat("%",#{sname},"%") and sage=#{sage}
</select>
<resultMap id="SNameAndAge" type="pojo.Student">
<id property="sname" column="sname" />
<result property="ssex" column="ssex" />
<result property="sage" column="sage" />
</resultMap>
</mapper>
4.测试
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
List<Student> students = studentMapper.selectAll();
for (Student student : students) {
System.out.println(student.toString());
}
}
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
List<Student> students = studentMapper.selectNames("李");
for (Student student : students) {
System.out.println(student.toString());
}
}
@Test
public void test3(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
Student students = studentMapper.selectNameAndAge("李",34);
// for (Student student : students) {
System.out.println(students.toString());
// }
}

5.注解开发
改变beans.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
http://www.springframework.org/schema/context/spring-context.xsd">
<import resource="c3p0.xml"/>
<!-- <import resource="druid.xml"/>-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis-->
<property name="configLocation" value="classpath:MybatisConfig.xml"/>
<property name="mapperLocations" value="classpath:Mapper/*.xml"/>
</bean>
<!-- 注册接口类的bean,使得程序中可以用注解方式获取 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="DAO" />
</bean>
<!-- 自动扫描(自动注入) -->
<context:component-scan base-package="DAO"/>
<!-- 开启注解 -->
<context:annotation-config />
</beans>
测试
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class StudentTest {
@Autowired
StudentMapper mapper;
@Test
public void selectAll() {
List<Student> students = mapper.selectAll();
for (Student student : students) {
System.out.println(student);
}
}
}
附上学习链接
(1条消息) springMVC +mybites 中SqlSessionDaoSupport 的使用_山峰-飘雨的博客-CSDN博客
(1条消息) 超详细的JDBC基础,内含 C3P0 和 Druid 等 工具类 JAR 包下载_druidjar包_一直在进步的派大星的博客-CSDN博客
(1条消息) 超详细的JDBC基础,内含 C3P0 和 Druid 等 工具类 JAR 包下载_druidjar包_一直在进步的派大星的博客-CSDN博客

1890

被折叠的 条评论
为什么被折叠?



