mybatis 使用resultMap实现数据库的操作

resultType:直接表示返回类型

resultMap:对外部resultMap的引用

二者不能同时使用

创建一个实体类Role和User

public class Role {
    private Integer id;
    private String roleCode;
    private String roleName;
  //省略set、get方法

创建User类(在User中有roleId   1对多关系)

public class User {
    private Integer id;
    private String userName;
    private String userCode;
    private String userPassword;
    private Integer roleId;
    private String roleName;  //省略set、get方法
    

创建RoleMapper接口

public interface RoleMapper {

    public void  add(Role role);

    public void update(Role role);

    public void delete(Role role);

    public List<Role> getRoleList();

}

创建UserMapper接口

//接口的名字和xml的名字一样,这样xml中的namespace就不用改
public interface UserMapper {
    //接口名的方法名一定要和xml中的id名一样
    public int count();

    public void add(User user);

    public void update(User user);

    public void delete(User user);

    public List<User> getUserList();

    //根据roleid获取用户列表
    public List<User> getUserByRoleId(Role role);
}

创建RoleMapper.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="cn.bdqn.dao.RoleMapper">
    <select id="getRoleList" resultType="Role">
        select * from role
    </select>
    <insert id="add" parameterType="Role">
        insert into role (roleCode,roleName)
            values (#{roleCode},#{roleName})
    </insert>
    <update id="update" parameterType="Role">
        update role set roleCode=#{roleCode},roleName=#{roleName} where id=#{id}
    </update>
    <delete id="delete" parameterType="Role">
        delete from role where id=#{id}
    </delete>
</mapper>

创建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">
<!-- 如果我要调用mapper文件,就去拿到namespace+id(方法名)的名字就可以访问 -->
<mapper namespace="cn.bdqn.dao.UserMapper">
    <!-- id要唯一的,一般是下拉类的方法名 -->
    <!-- 返回的是什么类型int -->
    <select id="count" resultType="int">
        select count(1) from user
    </select>
    <!-- 增加 -->
    <insert id="add" parameterType="User">
        insert into user(userCode,userName,userPassword)
            values (#{userCode},#{userName},#{userPassword})
    </insert>
    <!-- 修改 -->
    <update id="update" parameterType="User">
        update user set userCode=#{userCode},userName=#{userName},
        userPassword=#{userPassword} where id=#{id}
    </update>
    <!-- 删除 -->
    <delete id="delete" parameterType="User">
        delete from user where id=#{id}
    </delete>
    <!-- 查询 -->
    <select id="getUserList" resultType="User">
        select * from user
    </select>
</mapper>

加入这个方法用resultMap

 <!-- resultMap中的id随便取,但要保证id唯一就行 -->
    <!-- type指的是后台的javabean的类名 映射到哪里 -->
    <resultMap type="User" id="userMap">
        <!-- 显示的字段 -->
        <result property="id" column="id"/>
        <result property="userCode" column="userCode"/>
        <result property="userName" column="userName"/>
        <result property="roleName" column="roleName"/>

    </resultMap>
    <!-- 拿roleID -->
    <select id="getUserByRoleId" parameterType="User" resultMap="userMap">
        select u.*,r.roleName as roleName from user u,role r where u.roleId = r.id and u.roleId=#{id}
    </select>

在mybatis-config.xml中添加<mapper resource="cn/bdqn/dao/RoleMapper.xml"/>

<?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">

<!-- 通过这个配置文件完成mybatis与数据库的连接 -->
<configuration>
    <!-- 引入 jdbc.properties 文件-->
    <properties resource="jdbc.properties"/>
    <!-- alias别名 -->

<!-- 配置mybatis的log实现LOG4J -->
<settings>
        <setting name="logImpl" value="LOG4J" />
</settings>
    <typeAliases>
        <!-- <typeAlias type="cn.bdqn.pojo.User" alias="User"/> -->
        <!-- 用这个比较方便,不用一个一个写。包下的就是他的类名 -->
        <package name="cn.bdqn.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <!--配置事务管理,采用JDBC的事务管理  -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 将mapper文件加入到配置文件中  将来mapper文件很多所以是mappers -->
    <mappers>
        <mapper resource="cn/bdqn/dao/UserMapper.xml"/>
        <mapper resource="cn/bdqn/dao/RoleMapper.xml"/>
    </mappers>
</configuration>

测试

//查询
    @Test
    public void getUserListTest(){
        SqlSession sqlSession = null;
        try {
            List<User> userList = new ArrayList<User>();
            sqlSession = MyBatisUtil.createSqlSession();
            userList = sqlSession.selectList("cn.bdqn.dao.UserMapper.getUserList");
            for(User user:userList){
                logger.debug("user的id==="+user.getId());
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession(sqlSession);
        }
    }
时间: 2024-09-28 10:39:31

mybatis 使用resultMap实现数据库的操作的相关文章

mybatis 代理方式对数据库进行操作

UserMapper.xml文件 <span style="font-family:Courier New;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapp

好947 Mybatis 配置resultMap 带参数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错

//TMD 写几个demo 还有大站采集 <a target=_blank href="http://hao947.com/" target="_blank">好947</a> 映射配置文件 <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 --> <RESULTMAP id=BaseResultMap type="person"><pre name="c

Mybatis实现简单的数据库增删改查操作

Mybatis实现简单的数据库增删改查操作 框架:mybatis(3.5.2) 数据库:mysql 工具:idea 1.新建一个maven项目,在pom文件中添加mybatis依赖及MySQL依赖 <!-- mybatis核心依赖 --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId&g

Mybatis的ResultMap的使用

本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是Vo类.现在需要做一个需求,有两种方式来实现: 使用现有的Service接口,或者自己在编写一些用到的接口,手动使用Java代码来分别调用Service接口来查出各个model,然后在业务层将model转换为vo,最后返回给前端json串.       为需求相关的页面定义自己的vo,在vo中只定义前

Mybatis的ResultMap的使用(转)

本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是Vo类.现在需要做一个需求,有两种方式来实现: 使用现有的Service接口,或者自己在编写一些用到的接口,手动使用Java代码来分别调用Service接口来查出各个model,然后在业务层将model转换为vo,最后返回给前端json串. 为需求相关的页面定义自己的vo,在vo中只定义前端用到的字段

使用MyBatis的resultMap高级查询时常用的方式总结

以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的学习, 希望与大家分享学习心得, 有说的不对的地方请大家帮指教 下面是PD设计的几张数据库模型 先说下表吧 多对多 采用 传统而经典的 用户角色表,并没有采用当今流行的联合主键方式 而是将 用户表_id 和 角色表_id 进行Unique 详情参见http://www.cnblogs.com/Yin

mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_只能标签

<?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="cn.cnsdhzzl.dao.StudentDao&q

MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  mapper根节点下配置ResultMap节点信息 <resultMap type="Student" id="studentMapper"> <result column="sname" property="stunam

程序中数据库的操作历史和对数据库操作的实体类注意事项

稍微了解一下程序中数据库操作历史吧! 1.首先是JDBC连接 2.c3p0 3.JPA JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 4.hibernate 实现了全自动的ORM(对象关系映射) 数据持久化:用户只需要操作对象即可,内部将对象最终转化为sql. 结果集映射:将sql执行后的结果自动的映射为对象 缺点: 耗费内存 会形成冗余的sql,执行的效率较低