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

编程入门 行业动态 更新时间:2024-10-10 17:25:34

Springboot开心学习(第八天)——Springboot整合<a href=https://www.elefans.com/category/jswz/34/1771330.html style=持久层技术"/>

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

文章目录

  • 1. Springboot整合JdbcTemplate
    • 1.1 新增操作
    • 1.2 更新操作
    • 1.3 删除操作
    • 1.4 查询操作
    • 1.5 查询操作(简便)
  • 2. Springboot整合JdbcTemplate 多数据源
  • 3. Springboot整合Mybatis
    • 3.1 xml文件与mapper放在一起
    • 3.2 xml文件放在resource下
  • 4. Springboot整合Mybatis多数据源

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;}@Overridepublic 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 {@AutowiredJdbcTemplate 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 {@AutowiredUserService userService;@Testvoid 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>() {@Overridepublic 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 {@BeanJdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dsOne){return new JdbcTemplate(dsOne);}@BeanJdbcTemplate 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.DruidDataSourcespring.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;@Testvoid 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 mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".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 {@AutowiredUserMapper userMapper;@Testvoid 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.DruidDataSourcespring.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;@Overridepublic 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;@Beanpublic SqlSessionFactory sqlSessionFactory1(){SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();try {factoryBean.setDataSource(dataSource1);return factoryBean.getObject();} catch (Exception e) {e.printStackTrace();}return null;}@Beanpublic 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;@Beanpublic SqlSessionFactory sqlSessionFactory2(){SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();try {factoryBean.setDataSource(dataSource2);return factoryBean.getObject();} catch (Exception e) {e.printStackTrace();}return null;}@Beanpublic 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 mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".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 mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".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 {@AutowiredUserMapper1 userMapper1;@AutowiredUserMapper2 userMapper2;@Testvoid contextLoads() {List<User> allUser = userMapper1.getAllUser();System.out.println(allUser);List<User> allUser1 = userMapper2.getAllUser();System.out.println(allUser1);}}

执行结果:

更多推荐

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

本文发布于:2024-03-23 23:22:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:持久   第八天   技术   Springboot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!