MyBatis入门 Day10 2018-11-28

MyBatis

  • mybatis-3.4.6
  • jdk1.8+

一、mybatis入门

1.依赖jar包

mybatis基础包
  • pom.xml引入依赖
    <dependencies>
        <!-- mybatis依赖及需要的依赖start -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.9</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- mybatis依赖及需要的依赖 end -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
            <!-- 2.10及以上版本新增了对java9的特性支持,不兼容 -->
        </dependency>
    </dependencies>

2. MyBatis 配置文件

  • mybatis-config.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>
    <!-- 引入外部资源文件 -->
    <properties resource="db.properties"></properties>
    
    <settings>
        <!-- 指定mybatis所用日志的具体实现 -->
        <setting name="logImpl" value="LOG4J"/>
        <!-- 设置驼峰匹配 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    <!-- 设置包扫描(别名) -->
    <typeAliases>
        <package name="com.zhougl.web.beans" />
    </typeAliases>
    <!-- 配置环境:可以配置多个环境,default:配置某一个环境的唯一标识,表示默认使用哪个环境 -->
    <environments default="development">
        <environment id="development">
        <!-- 指定事务管理类型,type="JDBC"指直接简单实用了JDBC提交和回滚设置 -->
            <transactionManager type="JDBC" />
            <!-- dataSource指配置数据源,type="POOLED"是JDBC连接对象的数据源连接池的实现 -->
            <dataSource type="POOLED">
                <!-- 配置连接信息 -->
                <property name="driver" value="${jdbc.driverClass}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 配置持久化类映射文件:用来配置sql语句和结果集类型等 -->
    <mappers>
        <mapper resource="com/zhougl/web/dao/mapper/PhoneUserMapper.xml" />
    </mappers>
</configuration>

3. Mapper映射文件

  • PhoneUserMapper.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习惯上设置成包名+sql映射文件(PhoneUserMapper.xml去除后缀) -->
<mapper namespace="com.zhougl.web.dao.mapper.PhoneUserMapper">
  <resultMap id="BaseResultMap" type="com.zhougl.web.beans.PhoneUser">
    <id column="ID" jdbcType="VARCHAR" property="id" />
    <result column="NAME" jdbcType="VARCHAR" property="name" />
    <result column="BIRTH_DAY" jdbcType="TIMESTAMP" property="birthDay" />
    <result column="ID_NO" jdbcType="VARCHAR" property="idNo" />
    <result column="MOBILE_TEL" jdbcType="VARCHAR" property="mobileTel" />
    <result column="E_MAIL" jdbcType="VARCHAR" property="eMail" />
    <result column="PASSWD" jdbcType="VARCHAR" property="passwd" />
    <result column="CREATE_DATE" jdbcType="TIMESTAMP" property="createDate" />
  </resultMap>
  <insert id="insertPhoneUser" parameterType="com.zhougl.web.beans.PhoneUser">
      <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE">
        select SQ_PHONE_USER_ID.nextval as id from dual
      </selectKey>
    insert into PHONE_USER (ID, NAME, BIRTH_DAY, 
      ID_NO, MOBILE_TEL, E_MAIL, 
      PASSWD, CREATE_DATE)
    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{birthDay,jdbcType=TIMESTAMP}, 
      #{idNo,jdbcType=VARCHAR}, #{mobileTel,jdbcType=VARCHAR}, #{eMail,jdbcType=VARCHAR}, 
      #{passwd,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP})
  </insert>
  <select id="selectPhoneUserById" parameterType="String" resultMap="BaseResultMap">
    select * from PHONE_USER where ID=#{id,jdbcType=VARCHAR}
  </select>
</mapper>

4.MyBatis完成数据操作代码

public class BasicMyBaitisTest {
    public static void main(String[] args) throws IOException {
        //读取mybatis-config.xml配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //初始化mybatis.创建SQLSessionFactory实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //创建session实例
        SqlSession session = sqlSessionFactory.openSession();
        //创建phoneUser 对象
        PhoneUser user = new PhoneUser("test", "吴总", new Date(1992, 9, 26), "54232819800130824X", "15555555858", "wuzong@163.com", "123456", new Date());
        //插入数据 
        //session.insert("com.zhougl.web.dao.mapper.PhoneUserMapper.insertPhoneUser", user);
        PhoneUser userOne = session.selectOne("com.zhougl.web.dao.mapper.PhoneUserMapper.selectPhoneUserById", "1");
        System.out.println(userOne.toString());
        //提交事务
        session.commit();
        //关闭session
        session.close();
    }
}
//打印结果
PhoneUser [id=1, name=测试, birthDay=Tue Oct 23 00:00:00 CST 1984, idNo=220724198410236590, mobileTel=199123425678, eMail=ces@qq.com, passwd=1, createDate=Thu Nov 22 00:00:00 CST 2018]

5. log4j日志文件配置

#全局日志配置
#log4j.rootLogger=ERROR,stdout
log4j.rootLogger=DEBUG,Console
#MyBatis日志配置
#log4j.logger.com.zhougl.mapper.UserMapper=DEBUG
#控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6.mybatis-generator插件使用(快速生成代码)

  • generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!-- 引入外部资源文件 -->
    <properties resource="db.properties"></properties>
    <!--
        出现错误:Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        解决办法:将本地的MAVEN仓库中的mysql驱动引入进来
    -->
    <classPathEntry location="D:\Oracle\ojdbc6.jar"/>

    <context id="oraclegenerator" targetRuntime="MyBatis3">
        <!-- 生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- 格式化XML代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <!--不生成注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 配置数据库连接 -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}" />
                        
        <!-- java类型处理器
            用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
            注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;
        -->
        <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
            <!--
                true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
                false:默认,
                    scale>0;length>18:使用BigDecimal;
                    scale=0;length[10,18]:使用Long;
                    scale=0;length[5,9]:使用Integer;
                    scale=0;length<5:使用Short;
             -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>                       

        <!-- 指定javaBean生成的位置 -->
        <javaModelGenerator targetPackage="com.zhougl.web.beans" targetProject="src/main/java" >
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true" />
            <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.zhougl.web.dao.mapper" targetProject="src/main/java" >
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- 指定dao接口生成的位置,mapper接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.zhougl.web.dao" targetProject="src/main/java" >
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- table表生成对应的DoaminObject -->
        <!-- 指定表  emp 指定schema 配合enableSubPackages="false" 会让schema作为包的后缀
        这里不指定schema,逆向工程会查询sysuser都有哪些schema,对每个schema生成对象-->
        <table  tableName="PHONE_USER" domainObjectName="PhoneUser"></table>
        <!-- <table schema="TJ" tableName="tbl_dept" domainObjectName="Department"></table> -->

    </context>

</generatorConfiguration>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,695评论 19 139
  • 1 Mybatis入门 1.1 单独使用jdbc编程问题总结 1.1.1 jdbc程序 上边使...
    哇哈哈E阅读 3,419评论 0 38
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,280评论 0 4
  • Shely123阅读 291评论 0 0
  • 我说我有故事,却不知如何诉说,像个哑巴,想说话,发不出声儿,只是啊啊啊啊的乱叫。想说的话,憋在心里,更加烦躁,抓狂。
    火星上的通山五号1382阅读 131评论 0 0

友情链接更多精彩内容