配置开发MyBatis
Posted haibinggan-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置开发MyBatis相关的知识,希望对你有一定的参考价值。
MyBatis是一款持久层(ORMapping)框架,支持定制化SQL,避免了几乎所有的JDBC代码和手动设置参数,以及获取结果集。将接口和Java的POJO映射成数据库中的记录。
1、建立名为mybatis的maven父项目,同时配置依赖包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
2、建立mybatis-base的子模块并配置mybati依赖包
3、建立数据表News,并在父pom和子pom中引入数据库依赖包
<dependency>
<groupId>org.wisdom-framework</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34_1</version>
</dependency>
4、创建mybatis的配置文件:在src/main/resources/mybatis目录下创建mybatis.cfg.xml配置文件,在其里面编辑连接的数据库和连接方式
<environments default="development"> <!-- 配置数据源的相关信息 -->
<environment id="development">
<transactionManager type="jdbc" /> <!-- 使用JDBC方式管理 -->
<dataSource type="POOLED"> <!-- 设置数据源类型,此时为POOLED -->
<property name="driver" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mldn" />
<property name="username" value="root" />
<property name="password" value="mysqladmin" />
</dataSource>
</environment>
</environments>
5、创建与数据表相对应的vo类News,字段名称一样
6、在src/main/resources源目录下创建mybatis.mapper.cn.lt.mapping包,在该包里创建News.xml文件,用来配置使用的SQL语句。
<!-- 设置命名空间,可以与不同表的同类型操作进行区分,使用时以“空间名称.id”的方式调用 ,相当于配置文件自己的名字-->
<mapper namespace="cn.mldn.mapping.NewsNS">
<select id="getAllCount" resultType="Long" parameterType="map">
SELECT COUNT(*) FROM news WHERE ${column} LIKE #{keyWord} ;
</select>
<select id="findSplit" resultType="News" parameterType="map">
SELECT nid,title,pubdate FROM news WHERE ${column} LIKE #{keyWord} LIMIT #{start} , #{lineSize} ;
</select>
<select id="findAll" resultType="News">
SELECT nid,title,pubdate FROM news ;
</select>
<select id="findById" resultType="News" parameterType="long">
SELECT nid,title,pubdate FROM news WHERE nid=#{id} ;
</select>
<!-- 定义增加数据的操作配置,同时指定参数类型 -->
<insert id="doCreate" parameterType="News" keyProperty="nid" useGeneratedKeys="true">
INSERT INTO news(title,pubdate) VALUES (#{title},#{pubdate})
</insert>
<update id="doEdit" parameterType="News">
UPDATE news SET title=#{title},pubdate=#{pubdate} WHERE nid=#{nid}
</update>
<delete id="doRemove" parameterType="Long"> <!-- 单个参数 -->
DELETE FROM news WHERE nid=#{id}
</delete>
</mapper>
解释:<insert>中的id作为查询语句的唯一表示,parameterType为传入的数据类型,从vo类中传入,之所以只使用vo类名称而没有加上包,是因为在mybatis.cfg.xml中定义了别名:
<typeAliases>
<package name="cn.mldn.vo"/> <--根据包名称自动映射-->
</typeAliases>
resultType为从数据库返回的数据类型,keyProperty和useGeneratedKeys表示nid这个字段进行自动增长
SQL语句中的#{字段}代替了传统PreparedStatement中的“?”,相当于直接从vo类中取得数据
7、修改mybatis.cfg.xml文件,追加映射文件的路径
<mappers>
<mapper resource="mybatis/mapper/cn/mldn/mapping/News.xml"/>
</mappers>
到此为止,mybatis的核心配置文件定义完成,接下来需要对mabatis.cfg.xml资源文件进行读取
8、使用mybatis的Resources类进行配置文件加载,使用SqlSessionFactory类进行连接工厂定义,用来管理多个连接,使用SqlSession进行具体的CRUD数据操作。
番外篇:日志配置
当我们测试SQL执行的时候,程序是没有任何信息返回的,为了能够容易的看到程序是否执行,可以使用日志组件
1、父pom和子pom中引入三个日志的依赖包:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.8.0-beta2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.8.0-beta2</version>
<scope>test</scope>
</dependency>
2、在src/main/resources/目录里面配置log4j.properties配置文件,并写入
<--这里的包是News.xml中定义的namespace,但不包括类名,只有包名-->
log4j.logger.cn.lt.mapping=TRACE
这样执行SQL语句的时候就会在控制台输出日志
会发现,使用MyBatis之后,没有编写任何一行具体的JDBC操作,自动的根据配置文件将vo转换成了具体的参数
备注:
<transactionManager type="jdbc" /> <!-- 使用JDBC方式管理 -->
采用JDBC的事务处理,提供有事务的创建,提交,回滚和关闭功能。也可以采用managed方式,表示什么都不做,没有提交回滚的事务连接。
<dataSource type="POOLED"> <!-- 设置数据源类型,此时为POOLED -->
配置数据库连接访问,其中POOLED表示采用数据库连接池进行连接
也可以采用JNDI,表示使用Tomcat容器配置的数据库连接池访问
也可以采用UNPOOLED,表示不使用连接池管理
以上是关于配置开发MyBatis的主要内容,如果未能解决你的问题,请参考以下文章
MyBatisMyBatis 核心配置综述之 ResultSetHandler