Aop-jdbc自定义事务管理(spring boot-JdbcTemplate)

1、导包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

2、配置

spring:
  datasource:
    url: jdbc:mysql://192.168.33.80:3306/test1?useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Hongkong&zeroDateTimeBehavior=convertToNull
    username: root
    password: 123456

3、表对应的对象

/**
 * Created on 2019/4/6.
 *
 * @author Grak
 * @since 1.0
 */
public class Userinfo {

    private int uid;

    private String username;

    private String pwd;

    private String userimg;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getUserimg() {
        return userimg;
    }

    public void setUserimg(String userimg) {
        this.userimg = userimg;
    }

    @Override
    public String toString() {
        return "Userinfo{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", pwd='" + pwd + '\'' +
                ", userimg='" + userimg + '\'' +
                '}';
    }
}

4、RowMapper

/**
 * Created on 2019/4/6.
 * 数据库字段和实际java对象转换
 * @author Grak
 * @since 1.0
 */
public class MyRowMapper implements RowMapper<Userinfo> {
    @Override
    public Userinfo mapRow(ResultSet rs, int rowNum) throws SQLException {
        //使用的是数据库里面的名字
        int userId = rs.getInt("uid");
        String userName = rs.getString("username");
        String pwd = rs.getString("pwd");
        String userimg = rs.getString("userimg");
        Userinfo user = new Userinfo();
        user.setUid(userId);
        user.setUsername(userName);
        user.setPwd(pwd);
        user.setUserimg(userimg);
        return user;
    }
}

5、数据库调用方法

/**
 * Created on 2019/4/6.
 *
 * @author Grak
 * @since 1.0
 */
public interface UserService {

    List<Userinfo> findAll();
    Userinfo findById(int userId);
    int create(String username,String pwd,String userimg);
    int update(String username,String pwd,String userimg, int userId);
    int delete(int userId);
}

6、sql实现逻辑绑定

/**
 * Created on 2019/4/6.
 *
 * @author Grak
 * @since 1.0
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Userinfo> findAll() {
        String sql = "select * from userinfo ";
        return this.jdbcTemplate.query(sql,new MyRowMapper());
    }

    @Override
    public Userinfo findById(int userId) {
        String sql = "select * from userinfo where uid = ?";
        Userinfo user = jdbcTemplate.queryForObject(sql,new MyRowMapper(),userId);
        return user;
    }

    @Override
    public int create(String username, String pwd, String userimg) {
        String sql = "insert into userinfo(username,pwd,userimg) values(?,?,?)";
        return jdbcTemplate.update(sql,username,pwd,userimg);
    }

    @Override
    public int update(String username, String pwd, String userimg, int userId) {
        String sql = "update userinfo set username = ? , pwd = ? , userimg = ? where uid = ?";
        return jdbcTemplate.update(sql, username,pwd,userimg,userId);
    }

    @Override
    public int delete(int userId) {
        String sql = "delete from userinfo where uid = ?";
        return jdbcTemplate.update(sql,userId);
    }
}

7、事务监听逻辑类

/**
 * Created on 2019/4/6.
 *
 * @author Grak
 * @since 1.0
 */
@Component
public class DemoAspect {

    @Autowired
    private UserService user;

    public void runAspect(){
        //事务里面不要用try catch 如果使用了一定要手动回滚
        user.create("刘良","mm","江西");
        List<Userinfo> userinfos =  user.findAll();
        int uid = 0;
        for(Userinfo info : userinfos){
            if(info.getUsername().equals("刘良")){
                uid = info.getUid();
            }
        }
        System.out.println("用户信息:" + user.findById(uid));
        int m = 1/0;//模拟异常,回滚提交
        user.update("李白","ww","麻花",uid);
        System.out.println("用户修改:" + user.findById(uid));
//        user.delete(uid);
    }
}

8.maina方法

@SpringBootApplication
public class AopApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(AopApplication.class, args);

        DemoAspect user = (DemoAspect) ctx.getBean("demoAspect");
        user.runAspect();


    }
}

猜你喜欢

转载自blog.csdn.net/qq_35418518/article/details/89069360