zoukankan      html  css  js  c++  java
  • MyBatis基本配置和实践(一)

    第一步:创建Java工程和数据库表user

    第二步:使用Maven管理项目依赖

    第三步:在resources目录下加入log4j.properties

    第四步:在resources目录下加入SqlMapConfig.xml(MyBatis核心配置文件)

    第五步:在cn.it.pojo下创建user表的pojo类(User)

    第六步:在resources目录下加入Users.xml(SQL映射文件)

    第七步:在SqlMapConfig.xml中配置Users.xml(在核心配置文件中加载SQL映射文件)

        <mappers>
            <mapper resource="Users.xml"/>
            <!--不是Spring配置文件,不可以添加classpath:前缀-->
        </mappers>

    第八步:单元测试

    1、JDBCTest

    2、UserTest

    小结一:selectOne和selectList的区别是什么?

    1、selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
    
    2、selectList可以查询一条或多条记录。

    小结二:如果不同于例子中的自增主键ID,而采用UUID该如何操作?

    <!--需要增加通过select uuid()得到uuid值,注意这里使用的order是“BEFORE”-->
    <insert id="insertUser" parameterType="cn.it.mybatis.po.User">
        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
            select uuid()
        </selectKey>
        insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

    小结三:Mybatis如何解决JDBC编程中的问题?

    1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
        解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
    2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
        解决:将Sql语句配置在mapper映射文件中,与Java代码分离。
    3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
        解决:Mybatis自动将Java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
    4、结果集解析繁琐,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
        解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

    小结四:MyBatis与Hibernate有哪些不同?

    1、Mybatis和hibernate不同,它不完全是一个ORM框架,MyBatis需要程序员自己编写Sql语句,不过MyBatis可以通过XML或注解方式灵活配置要运行的sql语句,并将Java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
    
    2、Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等。但MyBatis无法做到数据库无关性,如果需要支持多种数据库,则需要自定义多套sql映射文件,工作量大。
    
    3、Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)用Hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,如何用好Hibernate、如何设计O/R映射、如何在性能和对象模型之间取权衡,都需要具有很强的经验和驾驭能力。

    错误总结:

    1、如果没有引入junit,Test目录下JDBC单元测试会报无法找到com.mysql.jdbc.Driver
    
    2、如果没有在pom.xml中设置build标签进行属性文件拷贝, 那么在resources目录下的配置文件在编译时将不会被复制到classpath路径下
    
    3、如果没有引入slf4j(一种log4j的具体实现类), 那么即使配置了log4j.properties也看不到MyBatis的日志输出.
    
    4、所有的代码和SQL文件位于 https://github.com/echo1937/mybatis-demo的mybatis-example模块中。
  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/echo1937/p/6536869.html
Copyright © 2011-2022 走看看