zoukankan      html  css  js  c++  java
  • mybatis自定义TypeHandler实现list转string

    参考Mybatis实现自定义TypeHandler

    1. 创建项目

    完整的pom.xml文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    <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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>mybatis</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mybatis</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.2</version>
            </dependency>
            <!--spring-boot-starter-jdbc自动配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    2. 配置application.yml

    server:
      port: 8083
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
    

    3. 编写User pojo

    @Data
    public class User {
        private Integer id;
        private String name;
        private Integer age;
        private List<String> hobbies;
    }
    
    

    4. 编写控制器,service,mapper

    @RestController
    public class UserController {
        @Autowired
        UserService userService;
    
        @GetMapping("/users")
        private List<User> getAllUser(){
            return userService.getAllUser();
        }
    
        @PostMapping("/users")
        private Integer addUser(@RequestBody User user){
            return userService.addUser(user);
        }
    }
    
    
    @Service
    public class UserService {
        @Autowired
        UserMapper userMapper;
    
        public List<User> getAllUser() {
            return userMapper.getAllUser();
        }
    
        public Integer addUser(User user) {
            return userMapper.addUser(user);
        }
    }
    
    
    @Component
    public interface UserMapper {
    
        @Results({
                @Result(column = "id", property = "id"),
                @Result(column = "name", property = "name"),
                @Result(column = "age", property = "age"),
                @Result(column = "hobby", property = "hobbies" ,typeHandler= HobbyTypehandler.class),
        })
        @Select("select * from user")
        List<User> getAllUser();
    
        @Insert("insert into user " +
                "(name, age, hobby) " +
                "values (#{user.name}, #{user.age},"
                + "#{user.hobbies, typeHandler=com.example.mybatis.typeHandler.HobbyTypehandler})")
        @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
        Integer addUser(@Param("user") User user);
    }
    
    

    5. 编写自定义Typehandler

    @Component
    public class HobbyTypehandler implements TypeHandler<List<String>> {
        @Override
        public void setParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
            StringBuffer sb = new StringBuffer();
            for (String s : strings) {
                sb.append(s).append(",");
            }
            preparedStatement.setString(i, sb.toString().substring(0, sb.toString().length() - 1));
        }
    
        @Override
        public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
            String[] arr = resultSet.getString(s).split(",");
            return Arrays.asList(arr);
        }
    
        @Override
        public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
            String[] arr = resultSet.getString(i).split(",");
            return Arrays.asList(arr);
        }
    
        @Override
        public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
            String[] arr = callableStatement.getString(i).split(",");
            return Arrays.asList(arr);
        }
    }
    

    6. 编写启动类

    @SpringBootApplication
    @MapperScan("com.example.mybatis.mapper")
    public class MybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MybatisApplication.class, args);
        }
    
    }
    
    

    7. mysql 表结构

    CREATE TABLE `user` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `age` int(6) DEFAULT NULL,
      `hobby` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    
    

    8. 测试

    9. 代码

    微云下载

  • 相关阅读:
    PowerDesigner将PDM导出生成WORD文档
    哨兵机制
    redis 主从数据同步
    redis RDB
    redis AOF机制
    redis数据结构
    dependencyManagement 和 dependencies的区别
    同源策略 跨域资源共享
    高可用 可扩展 多层反向代理架构演进
    String 杂记
  • 原文地址:https://www.cnblogs.com/ifme/p/12766128.html
Copyright © 2011-2022 走看看