美文网首页
使用MyBatis框架配置dao层服务流程

使用MyBatis框架配置dao层服务流程

作者: 黎涛note | 来源:发表于2019-10-19 21:59 被阅读0次

    1,导入mybatis-3.x.jar和数据库驱动jar包;

    2,在数据访问层添加如下文件:

    • 一个核心配置文件(例:Configuration.xml)
    • 多个映射器接口(例:UserMapper.java)
    • 多个映射xml文件(例:UserMapper.xml)

    3,编写代码,解析Configuration.xml文件,创建SqlSessionFactory;一个应用中,只需创建一个工厂;

    4,通过SqlSessionFactory创建SqlSession实例,进一步得到映射器接口的实例;

    UserMapper userMapper=session.getMapper(UserMapper.class);
    

    5,调用映射器接口中的方法执行业务处理;

    user = userMapper.selectById(userId);
    

    6,关闭SqlSession。

    • 【示例1】完成用户登录功能

    使用MyBatis框架完成根据用户账号读取用户信息。
    UseMapper接口中的方法:

    UserInfo getInfoByAccount(String account);
    

    注:
    1、在<select>元素中使用parameterType属性、resultType属性;
    2、要确保select语句的结果集中的列名和Bean中的属性一致,可在SQL语句
    中使用列别名。
    该文件中配置数据库的连接参数和映射文件路径。

    Configuration.xml配置文件

    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <environments default="dev">
    <environment id="dev">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <property name="driver" value=""/>
    <property name="url" value=""/>
    <property name="username" value=""/>
    <property name="password" value=""/>
    </dataSource>
    </environment>
    </environments>
    <mappers>
    <mapper resource=“com/.../XxxMapper.xml"/>
    </mappers>
    </configuration>
    
    <environment id="dev">
    <transactionManager type="JDBC"></transactionManager>
    <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver" />
    ......
    </dataSource>
    </environment>
    

    说明:

    transactionManager元素配置事务管理类型:
    JDBC - 使用JDBC的提交和回滚功能管理事务。
    MANAGED – 由容器管理事务。如Spring。
    dataSource元素配置数据源,有三种数据源:UNPOOLED,POOLED,JNDI。
    UNPOOLED –需配置以下属性: driver、url、username、password 。
    POOLED –连接池数据源 。除了上述属性之外,还可配置如下属性:
    poolMaximumActiveConnections –最大活动连接数。默认值:10
    poolMaximumIdleConnections –最大空闲连接数。
    poolMaximumCheckoutTime –池中连接的检查时间。默认值:20000毫秒
    

    获取SqlSession和Mapper实例

    • SqlSessionFactory 是创建SqlSession 的工厂。
    核心配置文件Configuration.xml中配置了数据库的连接参数、连接池信息和事
    务属性,通过解析核心配置文件创建SqlSessionFactory对象。
    示例代码:

    String rs = “com…/Configuration.xml";
    Reader reader = Resources.getResourceAsReader(rs);
    sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
    

    • 【了解】Configuration.xml文件中,environments下可配置多套环境,包括数
    据源信息、事务属性等 ,但一个SqlSessionFactory实例只对应一种环境。
    通过sqlSessionFactoryBuilder.build(Reader reader, String id)方法,传入环境id即可构
    建应用此环境参数的SqlSessionFactory。

    ①创建SqlSession:

    SqlSession session = sqlSessionFactory.openSession();
    //该SqlSession默认非自动提交事务。也可使用以下重载的方法:
    SqlSession openSession(boolean autoCommit)
    

    ② 获取Mapper实例

    UserMapper um = session.getMapper(UserMapper.class);
    

    Mapper映射xml文件

    文档类型声明:
    <!DOCTYPE mapper PUBLIC
    "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    • 示例:
    <mapper namespace="com...UserMapper">
    <select id="" parameterType="_int" resultType="UserInfo">
    <![CDATA[SELECT ID,NAME FROM USERINFO WHERE ID=#{id}]]>
    </select>
    ……
    </mapper>
    
    注:
    namespace属性值为映射器接口的完整类名;
    SQL语句中的占位符使用#{}
    

    (1)<select>元素

    该元素中放置select查询语句,该元素的属性:

    id --语句id,对应映射器接口中的方法名
    parameterType --参数类型
    resultType --结果类型
    resultMap --结果映射
    

    注: parameterType 和resultType 属性取值为自定义类的完整限定名或MyBatis预定义
    别名。 MyBatis预定义别名如下:


    image.png

    【示例2】产品信息列表页面。

    ProductMapper接口中的方法:

    List<ProductInfo> getProductList();
    
    注:

    1,方法返回值类型为List或Set类型,MyBatis均会自动识别。<select>元素的
    resultType属性设置List中的元素类型;
    2,可在<select>元素中使用resultMap属性,通过重用<ResultMap>可减少编
    码量;也可解决Bean中的属性名为数据库保留字的情况;
    3、resultMap属性和resultType属性不能同时存在。

    【示例3】使用<sql>定义可重用的sql片段

    <sql id=“id">
        select ... from ...
    </sql>
    

    使用:

    <select>
          <include refid=“id"></include>
          ...
    </select>
    

    【示例4】使用typeAliases元素设置类别名

    可以在XML映射文件中使用别名取代类的全限定名。例:

    <typeAliases>
        <typeAlias alias="User" type="com … User" />
    </typeAliases>
    

    (2)<insert>元素

    该元素中放置insert语句。
    无需使用resultType属性,默认返回整数,代表该语句影响的记录条数;

    【示例5】添加新产品

    ProductMapper接口中的方法:

    int saveInfo(ProductInfo info);
    

    执行insert语句时,如果某些属性值可能为null,此时需要声明该属性对应
    列的jdbcType。
    如下:

    insert into userInfo(id,name,age,birthday) values(
        #{id},
        #{name},
        #{age},
        #{birthday,jdbcType=DATE}
    )
    

    jdbcType属性指明该null参数对应的列类型为DATE类型。

    jdbcType属性可取org.apache.ibatis.type.JdbcType的枚举值:

    TINYINT; SMALLINT; INTEGER;
    FLOAT; REAL; DOUBLE; NUMERIC; DECIMAL;
    CHAR; VARCHAR; LONGVARCHAR;
    DATE; TIMESTAMP;
    BLOB; CLOB;
    BOOLEAN;
    NCHAR; NVARCHAR
    

    主键列的值若是借助序列生成,同时程序中还要使用刚生成的主键值,则需使用
    <selectKey>子句。如下:

    <insert id="" parameterType=“">
          <selectKey keyProperty=“" resultType="" order="BEFORE">
                select SEQ_disp.NEXTVAL from DUAL
           </selectKey>
          insert into ......
    </insert>
    

    如果主键列是自增类型(auto_increment),则<insert>中使用如下属性:

    useGeneratedKeys=“true” keyProperty=“someId”
    

    相关文章

      网友评论

          本文标题:使用MyBatis框架配置dao层服务流程

          本文链接:https://www.haomeiwen.com/subject/xynnmctx.html