Springboot开心学习(第八天)——Springboot整合持久层技术

1. Springboot整合JdbcTemplate

创建新的项目,依赖如下:
在这里插入图片描述
pom.xml修改这两个地方
在这里插入图片描述

整体结构:
在这里插入图片描述

application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/sky

User

package org.sky.jdbctemplate.bean;

/**
 * @author sky
 * @date 2020/7/29 9:34
 */
public class User {
    private Integer id;
    private String username;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getUsername() {
        return username;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}


1.1 新增操作

UserService

package org.sky.jdbctemplate.service;

import org.sky.jdbctemplate.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

/**
 * @author sky
 * @date 2020/7/29 9:35
 */
@Service
public class UserService {

    @Autowired
    JdbcTemplate jdbcTemplate;

    public Integer addUser(User user){
        return jdbcTemplate.update("insert into user (username, address) values (?, ?);",
                user.getUsername(), user.getAddress());
    }
}

JdbctemplateApplicationTests

package org.sky.jdbctemplate;

import org.junit.jupiter.api.Test;
import org.sky.jdbctemplate.bean.User;
import org.sky.jdbctemplate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class JdbctemplateApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        User user = new User();
        user.setUsername("sky");
        user.setAddress("China");
        userService.addUser(user);
    }

}

运行测试类,查看数据库数据:
在这里插入图片描述

1.2 更新操作

UserService中添加

public Integer updateUserNameById(User user) {
   return jdbcTemplate.update("update user set username = ? where id=?;",
            user.getUsername(), user.getId());
}

JdbctemplateApplicationTests中添加

@Test
void test1(){
    User user = new User();
    user.setId(1);
    user.setUsername("sky-2");
    userService.updateUserNameById(user);
}

结果:
在这里插入图片描述

1.3 删除操作

UserService中添加

public Integer deleteUserById(int id) {
   return jdbcTemplate.update("delete from user where id=?;", id);
}

JdbctemplateApplicationTests中添加

@Test
void test2(){
    userService.deleteUserById(1);
}

结果:
在这里插入图片描述

1.4 查询操作

UserService中添加

public List<User> getAllUsers(){
    return jdbcTemplate.query("select * from user", new RowMapper<User>() {
        @Override
        public User mapRow(ResultSet resultSet, int i) throws SQLException {
            User user = new User();
            user.setId(resultSet.getInt("id"));
            user.setUsername(resultSet.getString("username"));
            user.setAddress(resultSet.getString("address"));
            return user;
        }
    });
}

JdbctemplateApplicationTests中添加

@Test
void test3(){
    List<User> allUsers = userService.getAllUsers();
    System.out.println(allUsers);
}

结果:(记得提前在数据库加几条数据)
在这里插入图片描述

1.5 查询操作(简便)

UserService中添加

public List<User> getAllUsers2(){
    return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
}

JdbctemplateApplicationTests中添加

@Test
void test4(){
    List<User> allUsers = userService.getAllUsers2();
    System.out.println(allUsers);
}

结果:(记得提前在数据库加几条数据)
在这里插入图片描述

2. Springboot整合JdbcTemplate 多数据源

情景:多个JdbcTemplate操作多个数据库。

数据库准备:
sky
在这里插入图片描述
sky2
在这里插入图片描述
整体架构:
在这里插入图片描述
pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

User和上一节一样

DataSourceConfig

package org.sky.jdbctemplate2.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author sky
 * @date 2020/7/29 10:26
 */
@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    DataSource dsOne(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource dsTwo(){
        return DataSourceBuilder.create().build();
    }
}

JdbcTemplateConfig

package org.sky.jdbctemplate2.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * @author sky
 * @date 2020/7/29 10:29
 */
@Configuration
public class JdbcTemplateConfig {
    @Bean
    JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dsOne){
        return new JdbcTemplate(dsOne);
    }
    @Bean
    JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dsTwo){
        return new JdbcTemplate(dsTwo);
    }
}

application.properties

spring.datasource.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/sky
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.jdbc-url=jdbc:mysql://127.0.0.1:3306/sky2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

Jdbctemplate2ApplicationTests

package org.sky.jdbctemplate2;

import org.junit.jupiter.api.Test;
import org.sky.jdbctemplate2.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
class Jdbctemplate2ApplicationTests {

    @Autowired
    @Qualifier("jdbcTemplateOne")
    JdbcTemplate jdbcTemplateOne;

    @Resource(name = "jdbcTemplateTwo")
    JdbcTemplate jdbcTemplateTwo;

    @Test
    void contextLoads() {
        List<User> list1 = jdbcTemplateOne.query("select * from user;", new BeanPropertyRowMapper<>(User.class));
        System.out.println(list1);
        List<User> list2 = jdbcTemplateTwo.query("select * from user;", new BeanPropertyRowMapper<>(User.class));
        System.out.println(list2);
    }

}

启动测试类:
在这里插入图片描述

3. Springboot整合Mybatis

创建新的项目,依赖:
在这里插入图片描述
修改pom.xml
在这里插入图片描述

下面是共有的东西
User与上一节一样
application.properties与上一节一样

MybatisApplication 扫描Mapper接口

package org.sky.mybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "org.sky.mybatis.mapper")
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }

}

UserMapper

package org.sky.mybatis.mapper;

import org.sky.mybatis.bean.User;

import java.util.List;

/**
 * @author sky
 * @date 2020/7/29 11:37
 */
public interface UserMapper {
    List<User> getAllUser();

    Integer addUser(User user);

    Integer updateUserById(User user);

    Integer deleteUserById(Integer id);
}

mapper.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="org.sky.mybatis.mapper.UserMapper">
    <select id="getAllUser" resultType="org.sky.mybatis.bean.User">
        select * from user;
    </select>
    <insert id="addUser" parameterType="org.sky.mybatis.bean.User">
        insert into user (username,address) values (#{username},#{address});
    </insert>
    <update id="updateUserById" parameterType="org.sky.mybatis.bean.User">
        update user set username=#{username},address=#{address} where id=#{id}
    </update>
    <delete id="deleteUserById">
        delete from user where id=#{id}
    </delete>
</mapper>

UserMapper2:注解方式

package org.sky.mybatis.mapper;

import org.apache.ibatis.annotations.*;
import org.sky.mybatis.bean.User;

import java.util.List;

/**
 * @author sky
 * @date 2020/7/29 11:37
 */
//@Mapper
public interface UserMapper2 {
    @Select("select * from user")
    List<User> getAllUsers();

    @Results({
            @Result(property = "id", column = "id"),
            @Result(property = "username", column = "u"),
            @Result(property = "address", column = "a")
    })
    @Select("select username as u,address as a,id as id from user where id=#{id}")
    User getUserById(Integer id);

    @Select("select * from user where username like concat('%',#{name},'%')")
    List<User> getUsersByName(String name);

    @Insert({"insert into user(username,address) values(#{username},#{address})"})
    @SelectKey(statement = "select last_insert_id()", keyProperty = "id", before = false, resultType = Integer.class)
    Integer addUser(User user);

    @Update("update user set username=#{username},address=#{address} where id=#{id}")
    Integer updateUserById(User user);

    @Delete("delete from user where id=#{id}")
    Integer deleteUserById(Integer id);
}

3.1 xml文件与mapper放在一起

在这里插入图片描述
注意:修改pom.xml

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

MybatisApplicationTests

package org.sky.mybatis;

import org.junit.jupiter.api.Test;
import org.sky.mybatis.bean.User;
import org.sky.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class MybatisApplicationTests {

    @Autowired
    UserMapper userMapper;
    @Test
    void contextLoads() {
        List<User> users = userMapper.getAllUser();
        System.out.println(users);
    }

}

运行结果:
在这里插入图片描述

3.2 xml文件放在resource下

结构:
在这里插入图片描述
此时,需要修改pom.xml

mybatis.mapper-locations=classpath:mapper/*.xml

运行结果一样、

4. Springboot整合Mybatis多数据源

创建新的项目,依赖、pom文件修改与上一节一致。

整体结构:
在这里插入图片描述
application.properties

spring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/sky
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/sky2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

User

package org.sky.mybatis2.bean;

/**
 * @author sky
 * @date 2020/7/29 22:47
 */
public class User {
    private Integer id;
    private String username;
    private String address;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

DataSourceConfig

package org.sky.mybatis2.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author sky
 * @date 2020/7/29 22:39
 */
@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource dsOne(){
        return new DruidDataSourceBuilder().create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource dsTwo(){
        return new DruidDataSourceBuilder().create().build();
    }
}

MybatisConfig1

package org.sky.mybatis2.config;

import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;

/**
 * @author sky
 * @date 2020/7/29 22:42
 */
@Configuration
@MapperScan(basePackages = "org.sky.mybatis2.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1",
        sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisConfig1 {

    @Resource(name = "dsOne")
    DataSource dataSource1;

    @Bean
    public SqlSessionFactory sqlSessionFactory1(){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        try {
            factoryBean.setDataSource(dataSource1);
            return factoryBean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate1(){
        return new SqlSessionTemplate(sqlSessionFactory1());
    }

}

MybatisConfig2

package org.sky.mybatis2.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * @author sky
 * @date 2020/7/29 22:42
 */
@Configuration
@MapperScan(basePackages = "org.sky.mybatis2.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2",
        sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MybatisConfig2 {

    @Resource(name = "dsTwo")
    DataSource dataSource2;

    @Bean
    public SqlSessionFactory sqlSessionFactory2(){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        try {
            factoryBean.setDataSource(dataSource2);
            return factoryBean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate2(){
        return new SqlSessionTemplate(sqlSessionFactory2());
    }

}

UserMapper1

package org.sky.mybatis2.mapper1;

import org.sky.mybatis2.bean.User;

import java.util.List;

/**
 * @author sky
 * @date 2020/7/29 22:48
 */
public interface UserMapper1 {
    public List<User> getAllUser();
}

mapper1

<?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="org.sky.mybatis2.mapper1.UserMapper1">
    <select id="getAllUser" resultType="org.sky.mybatis2.bean.User">
        select * from user;
    </select>
</mapper>

UserMapper2

package org.sky.mybatis2.mapper2;

import org.sky.mybatis2.bean.User;

import java.util.List;

/**
 * @author sky
 * @date 2020/7/29 22:50
 */
public interface UserMapper2 {
    public List<User> getAllUser();
}

UserMapper2.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="org.sky.mybatis2.mapper2.UserMapper2">
    <select id="getAllUser" resultType="org.sky.mybatis2.bean.User">
        select * from user;
    </select>
</mapper>

Mybatis2ApplicationTests

package org.sky.mybatis2;

import org.junit.jupiter.api.Test;
import org.sky.mybatis2.bean.User;
import org.sky.mybatis2.mapper1.UserMapper1;
import org.sky.mybatis2.mapper2.UserMapper2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Mybatis2ApplicationTests {

    @Autowired
    UserMapper1 userMapper1;

    @Autowired
    UserMapper2 userMapper2;

    @Test
    void contextLoads() {
        List<User> allUser = userMapper1.getAllUser();
        System.out.println(allUser);
        List<User> allUser1 = userMapper2.getAllUser();
        System.out.println(allUser1);
    }

}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值