用实例解析MyBatis组件的关系

    xiaoxiao2021-03-26  45

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

    最新的MyBatis下载地址: https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.4.1

    最新的版本为:mybatis-3.4.1

    MyBatis资源的访问地址: http://www.mybatis.org/mybatis-3/zh/index.html

    MyBatis的核心组件包括:

    SqlSessionFactoryBuilder(构造器):根据配置信息或代码来生成SqlSessionFactory(工厂接口)SqlSessionFactory:用来创建SqlSession(会话)SqlSession:发送SQL去执行并返回执行结果,也可以获取Mapper接口

    SQLMapper:它是MyBatis新设计的组件,它是由一个JAVA接口和XML文件构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回执行结果。

    下面通过一个实例来说明MyBatis中各个组件使用的关系。

    创建一个简单的JAVA Project,代码结构如图所示:

    准备工作:

    0、创建数据库表

    在MySQL数据库中创建一个testdb数据库,然后创建实例需要的数据库表,表名为:tb_user。如下图所示:

    在JAVA Project工程中,导入需要的包:mybatis-3.2.6.jar; mysql-connector-java-5.1.13-bin.jar

    1、创建JAVA POJO对象

    package com.keymen.domain; import java.util.Date; public class User { private Integer id; private String username; private String password; private String email; private Integer status; private Date createtime; private Date udpatetime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public String getEmail() { return email; } public void setEmail(String email) { this.email = email == null ? null : email.trim(); } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public Date getUdpatetime() { return udpatetime; } public void setUdpatetime(Date udpatetime) { this.udpatetime = udpatetime; } }

    2、编写SqlSessionFactoryUtil类

    package com.keymen.utils; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionFactoryUtil { private static SqlSessionFactory sqlSessionFactory = null; private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class; private SqlSessionFactoryUtil() { } public static SqlSessionFactory initSqlSessionFactory() { String resource = "mybatis-config.xml"; InputStream inputStreamAsResource = null; try { inputStreamAsResource = Resources.getResourceAsStream(resource); } catch (IOException ex) { Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE, null, ex); } synchronized (CLASS_LOCK) { if (sqlSessionFactory == null) { sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStreamAsResource); } } return sqlSessionFactory; } public static SqlSession openSqlSession() { if (sqlSessionFactory == null) { initSqlSessionFactory(); } return sqlSessionFactory.openSession(); } }

    3、编写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" > <configuration> <typeAliases> <typeAlias type="com.keymen.domain.User" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="autoCommit" value="false" /> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/testdb" /> <property name="username" value="root" /> <property name="password" value="seagal890" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com\keymen\mapper\userMapper.xml" /> </mappers> </configuration>

    4、编写UserMapper类

    package com.keymen.mapper; import com.keymen.domain.User; public interface UserMapper { public User getUser(int id); public int deleteUser(int id); public int insertUser(User user); }

    5、编写UserMapper.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" > <mapper namespace="com.keymen.mapper.UserMapper"> <select id="getUser" parameterType="integer" resultType="user"> select id,username,password,emailfrom tb_user where id=#{id} </select> <insert id="insertUser" parameterType="user"> insert into tb_user(id,username,password,email) values(#{id},#{username},#{password},#{email}); </insert> <delete id="deleteUser" parameterType="integer"> delete from tb_user where id=#{id}; </delete> </mapper>

    6、编写log4j.properties属性文件

    # debug<info<warn<error log4j.rootLogger=debug, LOGFILE #log4j.debug=true # Set the enterprise logger category to FATAL and its only appender to CONSOLE. #设置包日志输出级别 #log4j.logger.com.xy6=INFO, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. #输出到控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %p [%c] - <%m>%n #输出到文件 log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender log4j.appender.LOGFILE.File=${webappRoot}/log/AllLog.log log4j.appender.LOGFILE.MaxFileSize=10000KB log4j.appender.LOGFILE.MaxBackupIndex=1000 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n #mybatis显示SQL语句日志配置 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG

    7、编写最后的测试类

    package com.keymen.application; import org.apache.ibatis.session.SqlSession; import com.keymen.domain.User; import com.keymen.mapper.UserMapper; import com.keymen.utils.SqlSessionFactoryUtil; public class MyBatisDemo { public static void main(String[] args) { // TODO Auto-generated method stub SqlSession sqlSession = null; try { sqlSession = SqlSessionFactoryUtil.openSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setId(6666); user.setUsername("testName"); user.setPassword("111111"); user.setEmail("testname@163.com"); userMapper.insertUser(user); //userMapper.deleteUser(6666); sqlSession.commit(); System.out.println("finished..."); } catch (Exception ex) { System.err.println(ex.getMessage()); sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } } }

    8、调试程序

    通过查询数据库中的tb_user表中的数据,可以看到id为6666的用户数据已经被插入到了数据库表中。

    另外一条编号id为 1001的数据是事先插入到数据库表tb_user中的。

    完毕。

    转载请注明原文地址: https://ju.6miu.com/read-350053.html

    最新回复(0)