MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架。MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO映射成数据库中的记录。
MyBatis作为持久层框架,主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置。这样的好处是将SQL语句和程序代码分离,可以在不修改代码的前提下,直接在配置文件中修改SQL。
Hibernate是以一种“全自动”的ORM框架,它实现了数据库表和POJO之间的映射,以及SQL的自动生成。
MyBatis相对于hibernate来说,是一种“半自动化”的ORM框架,MyBatis的着力点在pojo和sql之间的映射,MyBatis虽然也实现了数据库表和pojo之间的映射,但是并不能在运行期间生成SQL语句,需要程序员在配置文件中配置,将SQL需要的参数和返回的结果字段映射到指定POJO。
Mybatis以SQL开发的工作量和数据库移植上的让步,为系统设计提供了更大的自由空间。
CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(18) NOT NULL, `sex` char(2) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public class User { private Integer id; private String username; private String sex; private Integer age; public User(String username, String sex, Integer age) { super(); this.username = username; this.sex = sex; this.age = age; } public User() { super(); } //省略get、set方法 }
<?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指用户自定义的命名空间 --> <mapper namespace="com.dj.mapper.UserMapper"> <!-- id="save"是唯一的标示符 parameterType属性指明插入时使用的参数类型 useGeneratedKeys="true"表示使用数据库的自动增长策略 --> <insert id="save" parameterType="com.dj.pojo.User" useGeneratedKeys="true"> insert into t_user(username,sex,age) values(#{username},#{sex},#{age}) </insert> </mapper>
<?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"> <!-- XML 配置文件包含对 MyBatis 系统的核心设置 --> <configuration> <!-- 指定 MyBatis 所用日志的具体实现 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <!-- 环境配置,即连接的数据库。 --> <environments default="mysql"> <environment id="mysql"> <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 --> <transactionManager type="JDBC"/> <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 --> <mappers> <mapper resource="com/dj/mapper/UserMapper.xml"/> </mappers> </configuration>
public class MyBatisTest { @Test public void save() throws Exception{ //读取mybatis-config.xml InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //初始化mybatis,创建一个sqlsessionfactory类的实例 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); //创建一个SqlSession实例 SqlSession sqlSession = factory.openSession(); //创建一个User对象 User user = new User("王五", "男", 12); sqlSession.insert("com.dj.mapper.UserMapper.save", user); sqlSession.commit(); sqlSession.close(); } }
运行后可以看到结果
要想控制台显示sql语句,要导入log4j的jar包和log4j.properties文件。
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... log4j.logger.com.dj.mapper.UserMapper=DEBUG # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
控制台有如下显示
源码下载路径:https://files.cnblogs.com/files/dj-blog/MyBatisTest.zip
原文:http://www.cnblogs.com/dj-blog/p/7544612.html