目录
一、导言
有人会问为啥不将springmvc也整合?(下一篇文章会更新ssm整合)
现在的SSM好像是一个整体,很多新入坑的小白就会认为mybatis就必须跟spring、springmvc才能开发的潜意识。
mybatis只是作为一个持久层,Hibernate也可以替代它。
所以不要认为SSM就是一个整体,只是SSM比较流行而已。
有了springmvc就可以开发web项目,只有SM同样也可以开发项目,只是不面向web而已
二、创建数据库表
创建一张数据库表:t_user
三、新建一个module模块
四、导入依赖
依赖分析:
1、spring-context:这是spring的依赖包
2、spring-jdbc:这是spring自带的持久层依赖(有人会问为啥用mybatis还导入spring-jdbc依赖?这里的spring-jdbc是用来配置事务管理器,mybatis用来写sql语句)
3、mysql-connector-java:这是mysql的依赖包
4、mybatis:这是mybatis的依赖包
5、mybatis-spring:上面说过ssm不是一个整体,springmvc和spring是继承关系,可以直接用一个配置文件,但是mybatis与spring并不存在继承关系,所以要添加mybatis与spring之间的依赖包
6、druid:这是阿里的一个数据库连接池的一个实现,没学过连接池的最好去学一下
7、junit:一个单元测试,方便了程序员测试部分代码
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.13</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
记得cv完要刷新一下maven,依赖才会被加载
五、搭建项目架构
(1)编写jdbc.properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring6 jdbc.username=root jdbc.password=1234563
(2)写service层、dao层、pojo类
1、编写pojo类
package com.sm.pojo;
public class User {
private Integer id;
private String userName;
private String userAge;
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", userAge='" + userAge + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public User() {
}
public User(Integer id, String userName, String userAge) {
this.id = id;
this.userName = userName;
this.userAge = userAge;
}
}
2、mapper接口:
package com.sm.mapper;
import com.sm.pojo.User;
import java.util.List;
public interface UserMapper {
/**
* 添加
* @param user
* @return
*/
int insert(User user);
/**
* 删除
* @param id
* @return
*/
int delete(Integer id);
/**
* 修改
* @param user
* @return
*/
int update(User user);
/**
* 查单个
* @param id
* @return
*/
User select(Integer id);
/**
* 查所有
* @return
*/
List<User> selectAll();
}
3、service接口以及其实现类
package com.sm.service;
import com.sm.pojo.User;
import java.util.List;
public interface UserService {
/**
* 添加用户
* @param user
* @return
*/
int addUser(User user);
/**
* 删除用户
* @param id
* @return
*/
int deleteUser(Integer id);
/**
* 修改用户
* @param user
* @return
*/
int updateUser(User user);
/**
* 查询一个用户
* @param id
* @return
*/
User selectUser(Integer id);
/**
* 查所有用户
* @return
*/
List<User> selectAllUser();
}
这里的实现类记得写上@service注解,UserMapper记得写@Autowired自动装配
package com.sm.service.impl;
import com.sm.mapper.UserMapper;
import com.sm.pojo.User;
import com.sm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
public UserMapper userMapper;
@Override
public int addUser(User user) {
return userMapper.insert(user);
}
@Override
public int deleteUser(Integer id) {
return userMapper.delete(id);
}
@Override
public int updateUser(User user) {
return userMapper.update(user);
}
@Override
public User selectUser(Integer id) {
return userMapper.select(id);
}
@Override
public List<User> selectAllUser() {
return userMapper.selectAll();
}
}
(3)配置mybatis核心配置文件
这里只写settings标签,其他配置交给spring配置
<?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"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
(4)编写SQL映射文件
注意SQL映射文件的路径、命名要和mapper接口保持一致,namespace要写接口的全限定类名,sql标签的id要写接口的方法名
<?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="com.sm.mapper.UserMapper">
<insert id="insert">
insert into t_user values(null,#{userName},#{userAge})
</insert>
<delete id="delete">
delete from t_user where id=#{id}
</delete>
<update id="update">
update t_user set user_age=#{userAge} where user_name=#{userName}
</update>
<select id="select" resultType="user">
select * from t_user where id=#{id}
</select>
<select id="selectAll" resultType="user">
select * from t_user
</select>
</mapper>
(5)spring配置文件
<?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" xmlns:tx="http://www.springframework.org/schema/tx"
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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.sm"/>
<context:property-placeholder location="jdbc.properties"/>
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
<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>
<bean id="datasourceTransactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"/>
</bean>
<tx:annotation-driven transaction-manager="datasourceTransactionManger"/>
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="mybatis-config.xml"/>
<property name="dataSource" ref="datasource"/>
<property name="typeAliasesPackage" value="com.sm.pojo"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sm.mapper"/>
</bean>
</beans>
六、测试程序
这里就不将测试结果展示出来了,在测试的时候按照SQL映射文件传参即可
(关于SQL映射文件传参,在上一篇mybatis文章中有详细讲)
@Test
public void testSm(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = applicationContext.getBean("userService", UserService.class);
User user = new User(null,"张三","30");
User user1 = new User(null,"李四","18");
User user2 = new User(null,"王五","28");
User user3 = new User(null,"赵六","38");
//添加用户
userService.addUser(user);
userService.addUser(user1);
userService.addUser(user2);
userService.addUser(user3);
//修改用户
/*userService.updateUser(user);*/
//查询用户
/*System.out.println(userService.selectUser(1));*/
//查询多个用户
/*System.out.println(userService.selectAllUser());*/
//删除用户
/*userService.deleteUser(1);*/
}