今天我们要实现Spring和Mybatis的整合,实现对数据库进行增删改查的操作,首先使用XML的方式
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>samTestartifactId>
<version>1.0-SNAPSHOTversion>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
build>
<dependencies>
<dependency>
<groupId>aopalliancegroupId>
<artifactId>aopallianceartifactId>
<version>1.0version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.6.9version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.1version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>commons-poolgroupId>
<artifactId>commons-poolartifactId>
<version>1.6version>
dependency>
<dependency>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
<version>1.3version>
dependency>
<dependency>
<groupId>javaxgroupId>
<artifactId>javaee-apiartifactId>
<version>7.0version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.2.2version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.3.6.RELEASEversion>
dependency>
dependencies>
project>
编写完成后要点击右上角的maven进行刷新,记得要联网才能下载导入依赖
进度条在下面的终端查看
状态栏变成绿色✔,然后下面的进度条没有了,就说明引入成功了。
若是有爆红就根据报错来进行修改
1.spring-config.xml:这是Spring框架的配置文件。它包含了Spring容器的配置信息,用于定义和配置Spring的bean、数据源、事务管理等。通常也会在这里配置扫描注解、AOP等Spring相关的功能。
2.mybatis-config.xml:这是MyBatis框架的配置文件。它包含了MyBatis的全局配置信息,如数据库连接池、映射器(Mapper)的位置、类型别名等。在这个文件中,可以用来配置MyBatis的全局属性,以及指定映射器接口的位置。
3.db.properties:这是一个属性文件,通常用于存储数据库连接的配置信息,如数据库URL、用户名、密码等。这些配置可以在spring-config.xml
和mybatis-config.xml
中通过占位符的方式引用,以便在不同环境下进行配置切换。
4.log4j.properties(log4j日志框架配置文件):这是用于配置日志框架(例如Log4j)的文件。它定义了日志的输出方式、日志级别、日志文件的位置等。在应用程序中,我们可以使用日志框架来记录应用的运行日志,以便排查问题和监控应用状态。
这里就不附上代码了,配置文件可以在文章附带的资源包中下载
这里可以使用前面我们讲的,链接database自动生成pojo类
可以看到自动生成的pojo类如上,记得生成后要自己检查一下是否出错,映射关系是否正确无误。
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.steveDash.dao.user.UserMapper">
<insert id="saveUser" parameterType="Userss">
insert into users(uname,uage)values(#{uname},#{uage})
insert>
mapper>
这里的参数类型可以填User,是因为我们在mybatis-config中填入了别名包pojo
UserMapper接口文件中编写saveUser(),以及对User表的其他方法。
接口中的方法必须与SQL映射文件(就是mapper文件)中的SQL语句的ID 一 一 对应。
因此上面的UserMapper.xml的映射文件我已经修改好了,写代码就是这样,要边写,便检查自己是否有写错,不要等到最后再进行检查,这样很容易找不到问题。
这里的com.steveDash是公司域名的倒序写法,也可以用个人名等,这样不容易报错,也容易定位出问题。
包内新建一个user包,user包下新建一个UserService的接口,用于定义添加用户的方法。
package com.steveDash.service.user;
import com.steveDash.pojo.Users;
public interface UserService {
public int addUser(Users users);
}
然后创建该接口的实例UserServiceImpl
package com.steveDash.service.user;
import com.steveDash.dao.user.UserMapper;
import com.steveDash.pojo.Users;
import org.apache.log4j.Logger;
public class UserServiceImpl implements UserService {
private Logger logger = Logger.getLogger(UserServiceImpl.class);
private UserMapper userMapper;
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public int addUser(Users users) {
if(!users.equals("")&&!users.equals("null")) {
int result=userMapper.saveUser(users);
if(result>0) {
logger.info("输出插入成功");
return result;
}
}
logger.info("输出插入失败");
return 0;
}
}
⑨创建测试类:在test-jave下创建test包,用于创建测试类供我们测试程序是否正常运行
package test;
import com.steveDash.pojo.Users;
import com.steveDash.service.user.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserTest {
private Logger logger=Logger.getLogger(UserTest.class);
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
UserService userService = (UserService) context.getBean("userService");
Users user = new Users();
user.setUname("steveDash");
user.setUage(22);
userService.addUser(user);
}
}
前面bean id 说明的是实体类的唯一id,autowire="byName"的意思是根据Name来进行自动装配
也可以看出程序提示,插入成功,我们会过去数据库进行查看
可以看到数据库中插入了数据,但是存在同名的情况,我们查看一下数据库表设计
如下图:
那就很明显了,但是同个班也是有可能会出现学生同名的这种情况,所以就不做限制了,具体需求具体分析。
就是输入根据姓名进行查询,这里涉及到一个精准匹配和模糊查询。
一般来说都是模糊查询更为受用。因为用户输入姓名时可能会有误差,出现拼写错误等不一致情况,使用精准查询没办法搜索到用户。或者用户重名的情况下,在全栈开发的情况下还要考虑一手网络安全,防止注入攻击等。
因此对比起来,模糊查询姓名可以提供更灵活的搜索体验。
<select id="findUsersByName" parameterType="String" resultType="Users">
select * from users where uname like concat('%',#{uanem},'%')
select>
package com.steveDash.dao.user;
import com.steveDash.pojo.Users;
import java.util.List;
public interface UserMapper {
public int saveUser(Users users);
public List<Users> findUsersByName(String uname);
}
package com.steveDash.service.user;
import com.steveDash.pojo.Users;
import java.util.List;
public interface UserService {
public int addUser(Users users);
public List<Users> getUsersList(String uname);
}
package com.steveDash.service.user;
import com.steveDash.dao.user.UserMapper;
import com.steveDash.pojo.Users;
import org.apache.log4j.Logger;
import java.util.List;
public class UserServiceImpl implements UserService {
private Logger logger = Logger.getLogger(UserServiceImpl.class);
private UserMapper userMapper;
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public int addUser(Users users) {
if(!users.equals("")&&!users.equals("null")) {
int result=userMapper.saveUser(users);
if(result>0) {
logger.info("输出插入成功");
return result;
}
}
logger.info("输出插入失败");
return 0;
}
public List<Users> getUsersList(String uname){
try {
return userMapper.findUsersByName(uname);
}catch (RuntimeException e){
e.printStackTrace();
throw e;
}
}
}
package test;
import com.steveDash.pojo.Users;
import com.steveDash.service.user.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class UserTest {
private Logger logger=Logger.getLogger(UserTest.class);
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
UserService userService = (UserService) context.getBean("userService");
Users user = new Users();
user.setUname("steveDash");
user.setUage(22);
userService.addUser(user);
}
@Test
public void test1() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
UserService userService = (UserService) context.getBean("userService");
String uname="王";
List<Users> list=userService.getUsersList(uname);
for(Users user:list){
logger.info("id:"+user.getUid()+", 姓名:"+user.getUname()+", 年龄:"+user.getUage());
}
}
}
输出结果如下:与数据库中记录的完全一致,![外链图片转存失败,源站可能有
修改为如下代码:记得这里的包路径需要根据自己的实际项目进行修改
<context:component-scan base-package="com.steveDash.service"/>
@Service标明是一个service层的组件Bean。若是不声明的的话 那么测试类中的bean获取名就得修改为userServiceImpl
@Resource是依赖的自动注入,默认是按照名称注入,也就是对应我们dao包下的UserMapper接口,这里也可以用@Autowried,不过是默认按类型注入。
今天初步学习了Spring和Mybatis的整合方法,并且对数据库表Users进行了链接操作。整个项目的架构采用的是三层架构,是为了熟悉后面引入的SpringMVC做铺垫,也温习了前面文章讲解到的Mybatis核心内容和Spring的核心内容,分别使用了XML方式和注解方式进行开发,不过只完成了新增用户和模糊搜索用户俩个功能,其他的删除和更新功能。
PS:测试题,可以下载后通过对tb_person进行如下增删改查操作,来巩固完善知识点,学会SPring与mybatis整合的方法。
1.添加新的人员数据:对tb_person新增一条记录。
2.查询:请查询并显示所有sex是“男“或者”女“的记录。
3.修改:请把jack的性别修改为”女“。
4.在完成上面的几步之后,可以尝试使用SpringAOP方法,添加一个功能,在添加tb_person表记录的时候,向日志中写入新增人员信息成功,在修改tb_person表数据成功是,向日志中写入”修改人员信息成功“。
各位读者想要跟着学习的,数据库文件也会在文章的资源附件中携带,各位可以自行下载学习使用。另外我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。
作者:Stevedash
发表于:2023年9月11日 15点17分