mybaits字节编码错误

本文介绍了解决 MyBatis 中出现的字节编码错误的方法。通过调整 mybatis 核心配置文件及 mapper.xml 文件的编码设置,可以有效避免因编码不一致导致的数据读取错误。

mybaits字节编码错误

错误信息如下:
在这里插入图片描述
解决方法:
修改mybatis核心配置文件和mapper.xml配置文件即可
在这里插入图片描述
测试成功:
在这里插入图片描述

07-04
### 配置 MyBatis 的基本步骤 MyBatis 是一个优秀的持久层框架,支持定制化 SQL、存储过程以及高级映射。以下是使用 MyBatis 进行配置的基本步骤: 1. **添加依赖**:在项目的 `pom.xml` 文件中添加 MyBatis 和相关插件的依赖。例如,使用 Spring Boot 时,可以添加 MyBatis 启动器和 PageHelper 分页插件: ```xml <!-- Mybatis启动器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!-- mybatis分页插件 PageHelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <!-- jdbc连接启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 2. **配置数据源**:在 `application.properties` 或 `application.yml` 中配置数据库连接信息。如果使用 Druid 连接池,还需要额外的配置: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database username: your_username password: your_password driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: initial-size: 5 min-idle: 5 max-active: 20 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false stat-view-servlet: enabled: true url-pattern: /druid/* login-username: admin login-password: admin ``` 3. **创建 Mapper 接口**:定义操作数据库的方法,这些方法不需要实现具体的逻辑,MyBatis 会根据 XML 配置文件或注解自动绑定 SQL 语句: ```java public interface UserMapper { User getUserById(Integer id); List<User> getAllUsers(); int addUser(User user); int updateUser(User user); int deleteUser(Integer id); } ``` 4. **创建 Mapper XML 文件**:编写 SQL 语句并将其与接口方法绑定。例如,`UserMapper.xml` 可能如下所示: ```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="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select> <select id="getAllUsers" resultType="com.example.model.User"> SELECT * FROM users </select> <insert id="addUser"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> <update id="updateUser"> UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} </update> <delete id="deleteUser"> DELETE FROM users WHERE id = #{id} </delete> </mapper> ``` 5. **配置 MyBatis**:在 `application.properties` 或 `application.yml` 中配置 MyBatis 的相关属性,如映射文件的位置和别名等: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.model ``` ### 常见问题及解决方案 1. **无法找到 Mapper 文件**:确保 `mapper-locations` 配置正确,并且 Mapper 文件位于指定的目录下。 2. **类型转换问题**:使用内置的 `TypeHandler` 或自定义 `TypeHandler` 来处理 Java 类型和数据库字段类型的转换。例如,自定义 `TypeHandler` 可以解决特定类型的转换问题。 3. **分页查询不生效**:确保已经正确引入了 PageHelper 插件,并在查询前调用 `PageHelper.startPage(pageNum, pageSize)` 方法。 4. **Druid 监控页面无法访问**:检查 Druid 的配置是否正确,特别是 `stat-view-servlet` 的配置项,确保登录用户名和密码正确,并且 URL 模式匹配。 5. **SQL 注入问题**:使用 MyBatis 的参数占位符 `#{}` 而不是 `${}`,以防止 SQL 注入攻击。 ### 示例代码 以下是一个简单的示例,展示如何使用 MyBatis 进行基本的 CRUD 操作: #### Mapper 接口 ```java public interface UserMapper { User getUserById(Integer id); List<User> getAllUsers(); int addUser(User user); int updateUser(User user); int deleteUser(Integer id); } ``` #### Mapper XML 文件 ```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="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select> <select id="getAllUsers" resultType="com.example.model.User"> SELECT * FROM users </select> <insert id="addUser"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> <update id="updateUser"> UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} </update> <delete id="deleteUser"> DELETE FROM users WHERE id = #{id} </delete> </mapper> ``` #### Service 层 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public User getUserById(Integer id) { return userMapper.getUserById(id); } public List<User> getAllUsers() { return userMapper.getAllUsers(); } public int addUser(User user) { return userMapper.addUser(user); } public int updateUser(User user) { return userMapper.updateUser(user); } public int deleteUser(Integer id) { return userMapper.deleteUser(id); } } ``` #### Controller 层 ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUserById(@PathVariable Integer id) { return userService.getUserById(id); } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } @PostMapping public int addUser(@RequestBody User user) { return userService.addUser(user); } @PutMapping public int updateUser(@RequestBody User user) { return userService.updateUser(user); } @DeleteMapping("/{id}") public int deleteUser(@PathVariable Integer id) { return userService.deleteUser(id); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值