1 创建数据库/表
CREATE TABLE `t_user` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userCode` varchar(32) DEFAULT NULL,
`userName` varchar(32) DEFAULT NULL,
`userPassword` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
2.创建工程,目录,配置
src/main/java/cn.kgc/entity、mapper、service/…
src/main/resources/cn.kgc.mapper/…
src/test/java/cn.kgc.test/…
3.pom.xml
<dependencies>
<!-- spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- spring事务的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- mybatis集成spring的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!--连接池的依赖-->
<!-- 连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!-- junit的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
介绍(摘录):
Druid(德鲁伊)
Druid是java语言最好的数据库连接池。
Druid是作为商业中间件连接池,他们的性能以及调配比开源好。
数据库自带的POOLED不好
Druid的技术特点:
- 数据吞吐量大
- 支持流式数据摄入和实时
- 查询灵活且快速
如果人过多访问,mybatis会炸,而有这个Druid技术就不会。
为什么会有连接池的存在?
因为建立数据库连接是一个非常耗时、耗资源的行为,
所以通过连接池预先同数据库建立一些连接,放在内存中,
应用程序需要建立数据库连接时直接到连接池中申请一个就行,
用完后再放回去,
极大的提高了数据库连接的性能问题,节省了资源和时间。
当需要访问数据库时,只需要从数据库连接池中获取空闲的数据库连接,
当程序访问数据库结束时,数据库连接会放回数据库连接池中。
连接技术在jdbc的规范之上建立完成的。
4.spring主配置文件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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.配置数据源(利用Druid连接池) 开init方法 关close方法-->
<!-- 不用写driver 连接池去管理和连接数据库 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close" >
<property name="url" value="jdbc:mysql://localhost:3306/db_spring_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true" />
<property name="username" value="root" />
<property name="password" value="zjj" />
</bean>
<!--2.配置SqlSessionFactoryBean,这个类的内部会创建SqlSessionFactory对象
下面用的是set注入-->
<!--spring 集成 mybatis 1.引入数据源(取得连接) 2.导入mybatis-config-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!--3.配置 MapperFactoryBean:扫描器,
作用会将这个包中的所有接口都执行一次getMapper(),得到每个dao对象-->
<!-- 扫mybatis 作用:生成实体类的 mybatis的实现类就不用写了
扫描xml和mybatis持久层的接口 .getMapper就不用写了 由spring去管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.kgc.mapper" />
</bean>
<!-- 扫spring 4.扫描dao 注解注入-->
<context:component-scan base-package="cn" />
</beans>
题外话:
为了使用MyBatis功能,Spring配置文件中提供了两个bean,
配置SqlSessionFactoryBean和配置 MapperFactoryBean
在之前,单独使用MyBatis的时候调用数据库接口的方式是
sqlSession.getMapper(UserMapper.class).addUser(user);
之后,我们使用MapperScannerConfigurer,让它扫描特定的包,
自动帮我们成批的创建映射器。这样一来,就能大大减少配置的工作量。
4.cn/kgc/entity/User.java
package cn.kgc.entity;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class User {
private Integer id;
private String userCode;
private String userName;
private String userPassword;
}
5.cn/kgc/mapper/UserMapper.java
package cn.kgc.mapper;
import cn.kgc.entity.User;
public interface UserMapper {
Integer addUser(User user);
}
6.resources/cn/kgc/mapper/UserMapper.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">
<mapper namespace="cn.kgc.mapper.UserMapper">
<insert id="addUser" parameterType="cn.kgc.entity.User">
insert into t_user(userCode,userName,userPassword)
values (#{userCode},#{userName},#{userPassword})
</insert>
</mapper>
7.cn/kgc/service/UserService.java
package cn.kgc.service;
import cn.kgc.entity.User;
public interface UserService {
Integer addUser(User user);
}
8.cn/kgc/service/UserServiceImpl.java
package cn.kgc.service;
import cn.kgc.entity.User;
import cn.kgc.mapper.UserMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service(value = "userService")
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public Integer addUser(User user) {
return userMapper.addUser(user);
}
}
9.mybatis配置文件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>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<mappers>
<mapper resource="cn/kgc/mapper/UserMapper.xml"/>
</mappers>
</configuration>
10.test/java/cn.kgc.test/TestUserServiceImpl
@Test
public void testAdd(){
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ac.getBean("userService");
User user = new User();
user.setUserName("张三");
user.setUserCode("100");
user.setUserPassword("123789");
userService.addUser(user);
//不用提交事务 spring自动帮你
}
题外话:
idea配置代码模板
----2021.12.08