操作步骤:
1.建库建表
2.导入依赖(pom.xml)
3.编写配置类(JdbcConfig,MybatisConfig,SpringConfig)
4.创建实体类
5.创建Dao层接口,创建Dao层实现类实现Dao接口
6.创建Service层接口,创建Service层实现类实现Service接口
7.编写映射文件(UserMapper.xml)
8.编写测试类
项目建立图片
一、建表语句
create table test.user
(
id int auto_increment
primary key,
name varchar(10) null,
password varchar(20) null,
money int null,
notes varchar(10) null
);
二、导入Maven依赖
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leo.demos</groupId>
<artifactId>springmybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
</project>
三、编写配置类
1.JdbcConfig代码如下:
package demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
//Value中的值来自jdbc.properties
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
jdbc.properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
2. MybatisConfig代码如下:
package demo.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
@MapperScan("demo.dao")
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setTypeAliasesPackage("demo.pojo");
sqlSessionFactoryBean.setDataSource(dataSource);
Resource[] rs = null;
try {
rs = new PathMatchingResourcePatternResolver().getResources("classpath:UserMapper.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sqlSessionFactoryBean.setMapperLocations(rs);
return sqlSessionFactoryBean;
}
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("demo.dao");
return mapperScannerConfigurer;
}
}
3.SpringConfig代码如下:
package demo.config;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@ComponentScan("demo")
@PropertySource({"classpath:jdbc.properties"})
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement//开启事务
public class SpringConfig {
@Bean
public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
}
四、编写实体类
package demo.pojo;
public class User {
private Integer id;
private String name;
private String password;
private Integer money;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getMoney() {
return money;
}
public void setMoney(Integer money) {
this.money = money;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", money=" + money +
'}';
}
}
五、Dao层
1.UserDao代码如下:
package demo.dao;
import demo.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserDao {
void insertUser(User user);//添加用户
void deleteUser(String name);//删除用户
void updateUser(User user);//更新用户信息
List<User> userList();//查看用户姓名和余额
void updateNotes1(User user);//用户备注
void updateNotes2(User user);//用户备注
void transfer(@Param("name") String name, @Param("money") int money);//用户之间转账
}
2.UserDaoImpl代码如下:
package demo.dao;
import demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserDaoImpl implements UserDao{
@Autowired
private UserDao userDao1;
@Override
public void insertUser(User user) {
userDao1.insertUser(user);
System.out.println("insertUser ok");
}
@Override
public void deleteUser(String name) {
userDao1.deleteUser(name);
System.out.println("deleteUser ok");
}
@Override
public void updateUser(User user) {
userDao1.updateUser(user);
}
@Override
public List<User> userList() {
List<User> users = userDao1.userList();
// for (User user : users) {
// System.out.println("姓名:"+user.getName());
// System.out.println("账户余额:"+user.getMoney());
// }
return users;
}
@Override
public void updateNotes1(User user) {
userDao1.updateNotes1(user);
}
@Override
public void updateNotes2(User user) {
userDao1.updateNotes2(user);
}
@Override
public void transfer(String name,int money) {
userDao1.transfer(name,money);
System.out.println("yes");
}
}
六、Service层
1.UserService代码如下:
package demo.service;
import demo.pojo.User;
public interface UserService {
public void Account();//查看账户余额
public void Insert(User user);//添加新的用户
public void Delete(String name);//删除用户信息
public void ZZ(String name1,String name2,int money);//用户之间转账
public void Update(User user);//更新用户信息
}
2.UserServiceImpl代码如下:
package demo.service;
import demo.dao.UserDao;
import demo.dao.UserDaoImpl;
import demo.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDaoImpl;
@Override
public void Account() {
List<User> users = userDaoImpl.userList();
for (User user : users) {
if(user.getMoney()>50000){
System.out.println(user.getName()+" 账户余额:"+user.getMoney()+"元");
userDaoImpl.updateNotes1(user);
}
else
userDaoImpl.updateNotes2(user);
}
}
@Override
public void Insert(User user) {
userDaoImpl.insertUser(user);
System.out.println("Insert ok");
}
@Override
public void Delete(String name) {
userDaoImpl.deleteUser(name);
System.out.println("Delete ok");
}
@Transactional//添加事务
@Override
public void ZZ(String name1, String name2, int money) {
userDaoImpl.transfer(name1,money);
// int i=1/0;//用于测试事务能否正常回滚
userDaoImpl.transfer(name2,-money);
System.out.println("ok");
}
@Override
public void Update(User user) {
userDaoImpl.updateUser(user);
}
}
七、编写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="demo.dao.UserDao">
<insert id="insertUser" parameterType="demo.pojo.User">
insert into user(id,name ,password,money) values (#{id},#{name},#{password},#{money})
</insert>
<delete id="deleteUser" parameterType="String">
delete from user where name =#{name};
</delete>
<update id="updateUser" parameterType="demo.pojo.User">
update user set money = #{money} where id = #{id}
</update>
<select id="userList" resultType="demo.pojo.User">
select u.id,u.name,u.money from user u
</select>
<select id="updateNotes1" parameterType="demo.pojo.User" resultType="int">
update user set notes="大额用户" where name=#{name}
</select>
<select id="updateNotes2" parameterType="demo.pojo.User" resultType="int">
update user set notes="小额用户" where name=#{name}
</select>
<select id="transfer" parameterType="demo.pojo.User">
update user set money=money+#{money} where name=#{name}
</select>
</mapper>
八、测试类
package demo.test;
import demo.config.SpringConfig;
import demo.pojo.User;
import demo.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.security.Provider;
public class Test {
public static void main(String[] args) {
ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService=context.getBean("userServiceImpl",UserService.class);
//添加用户
//User user1 =new User();
//user1.setName("地主");user1.setPassword("123456");user1.setMoney(999999);
//userService.Insert(user1);
//添加用户
//User user2 =new User();
//user2.setName("财神");user2.setPassword("888888");user2.setMoney(888888);
//userService.Insert(user2);
//财神给地主转账50000
//userService.ZZ("地主","财神",50000);
//查看大于50000元的用户
//userService.Account();
//更改id为1的用户的账户
//User user = new User();
//user.setId(1);user.setMoney(50000);
//userService.Update(user);
//删除名字叫地主的用户
//userService.Delete("地主");
}
}