Mybatis中从数据库中获取值为null ResultMap
2020-08-01 12:08
36 查看
ResultMap和返回值为空的的问题
要解决的问题:属性名和字段名不一致
代码块如下:
接口:
package com.lx.dao; import com.lx.pojo.User; public interface UserMapper { User getUserById(int id); }
穿插:
要想使用@Alias注解的话,必须要在mybatis-config.xml配置typeAlias,例如:
<typeAliases> <package name="com.lx.pojo"/> </typeAliases>
实体类:
package com.lx.pojo; import org.apache.ibatis.type.Alias; @Alias("user") public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
resouce目录下的数据库配置文件:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8 username=root pwd=123456
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties" /> <!-- 可以给实体类起别名--> <typeAliases> <package name="com.lx.pojo"/> </typeAliases><environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${pwd}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com\lx\dao\UserMapper.xml"/> </mappers> </configuration>
工具类:获取sqlSession
package com.lx.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ //使用Mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } //有了SqlSessionFactory ,可以从中获取SqlSession 的实例 //SqlSession 在其中包含了面向数据库执行 SQL 命令的所有方法 public static SqlSession getSqlSession(){ SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; } }
执行sql语句,帮定UserMapper接口的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"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.lx.dao.UserMapper"> <select id="getUserById" parameterType="int" resultType="user"> select * from user where id= #{id} </select> </mapper>
测试类:
import com.lx.dao.UserMapper; import com.lx.pojo.User; import com.lx.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class test3 { @Test public void userbyid(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } }
测试结果:
pwd的值为null
mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找
相应列名的set方法设值 , 由于找不到setPassword() , 所以pwd返回null ; 【自动映射】
解决方法
使用结果集映射:ResultMap
column是数据库表的列名 , property是对应实体类的属性名
<?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"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.lx.dao.UserMapper"> <resultMap id="usermap" type="user"> <!-- id为主键 --> <id column="id" property="id"/> <!-- column是数据库表的列名 , property是对应实体类的属性名 --> <result column="name" property="name"/> <result column="password" property="pwd"/> </resultMap> <select id="getUserById" resultMap="usermap"> select * from user where id=#{id} </select> <!-- <select id="getUserById" parameterType="int" resultType="user">--> <!-- select * from user where id= #{id}--> <!-- </select>--> </mapper>
测试结果:
good good study ! day day up !
相关文章推荐
- java将数据库结果集封装成Map, java获取数据库字段
- mybatis 查询数据库,返回map集合
- Mybatis-update - 数据库死锁 - 获取数据库连接池等待
- mybatis获取map中的key和value
- java将数据库结果集封装成Map, java获取数据库字段 (修定)
- mybatis使用数据库id自增长插入数据并获取刚插入的数据的id
- MyBatis获取数据库自生成的主键Id
- Mybatis 获取resultMap的数据映射信息
- 【Mybatis】数据插入数据库时,获取自增主键
- mybatis resultMap 的日期字段无法获取时分秒的问题
- mybatis获取要插入到数据库的数据的id,针对after用法,做个笔记
- mybatis获取insert之后数据库自动生成的id
- Mybatis框架-12:resultMap(domain属性和数据库字段名不一致时如何封装数据)
- mybatis 使用 parameterType="Map" 传入值后 数据库中得到的却是 NULL
- mybatis 查询 数据库字段为null 返回map 接收不到字段
- Mybatis获取当前数据库时间
- MySQL数据库 使用MyBatis做持久化时 数据库命名带下划线的列获取不到
- Mybatis + SqlServer 数据库操作insert 时获取当前主键值
- mybatis resultMap 的日期字段无法获取时分秒的问题
- 从mybatis中获取数据库的名称