从一个简单的示例,我们开始进入Mybatis的世界!

来源:互联网 发布:截取在线视频片段软件 编辑:程序博客网 时间:2024/06/11 08:49

在这篇文章中,我们通过一个简单的Java示例来说明如何使用Mybatis,不必追究细枝末节的东西,只是看看如何去使用而已。


首选,我假定大家用过maven,因为我这里建立的是Maven项目,因为觉得用Maven引用jar包太方便了(发明这个东西的人太有才了)。


接下来我们需要在pom文件中添加我们需要的jar包,包含以下几个方面:

(1)mysql的驱动;

(2)mybaits的jar包;

(3)单元测试框架类;

(4)日志框架类;


具体pom文件内容如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.majing.learning</groupId><artifactId>mybatis</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>mybatis</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- 添加mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!-- 添加mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><!-- 添加junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><!-- 添加log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.0</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>

引入pom文件后,经过install我们就能看到我们得到了我们想要的各种jar包了。


一切准备就绪,接下来我们开始来真正的写业务部分了。对于mybatis来说,有一个很重要的配置文件,那就是configuration.xml,这个文件是我们使用mybatis的核心,后面也将围绕着这个配置文件来说明mybatis的各种功能。


我们先来看下这个配置文件configuration.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><settings><setting name="logImpl" value="LOG4J" /></settings><!-- 和spring整合后 environments配置将废除 --><environments default="development"><environment id="development"><!-- 使用jdbc事务管理 --><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments><mappers><mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" /></mappers></configuration>

我们先不管配置文件中的细节配置,从配置上我们可以直观的看出我们对日志、数据库连接地址和驱动都做了相关的配置。和日志相关的还需要有一个配置文件,用于控制日志往什么地方刷,这个配置文件就是log4j.properties,具体配置格式如下:

log4j.rootLogger=DEBUG,mybatis,stdout log4j.appender.mybatis=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.mybatis.layout=org.apache.log4j.PatternLayoutlog4j.appender.mybatis.DatePattern='.'yyyy-MM-dd-HHlog4j.appender.mybatis.layout.ConversionPattern=%m%nlog4j.appender.mybatis.file=D:/data/logs/mybatis/mybatis.loglog4j.appender.mybatis.encoding=UTF-8log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n 

至此,该有的配置文件我们都已经准备好了。

接下来开始写业务代码。这篇文章是一个示例,所以我们就按照最简单的来。我们模拟从数据库里读取一个用户。

我们先来看下数据库中的数据:

我们根据这个数据库表结构,来创建一个相应的POJO实体类User,如下所示:

package com.majing.learning.mybatis.entity;public class User {private int id;private String name;private String password;private int age;private int deleteFlag;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getDeleteFlag() {return deleteFlag;}public void setDeleteFlag(int deleteFlag) {this.deleteFlag = deleteFlag;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + ", deleteFlag=" + deleteFlag + "]";}}

接着,我们创建一个接口类,这个接口类定义我们对数据库表的操作行为,如下所示,我们定义一个查询方法:

package com.majing.learning.mybatis.dao;import com.majing.learning.mybatis.entity.User;public interface UserDao {public User findUserById (int userId);}

有了这些够了吗?NO!

我们还缺少一个很重要的东西,想想就知道,其实我们并没有告诉mybatis该怎么去查询,也就是这个方法对应什么样的执行语句,我们还需要mapper文件!!!

我们在UserDao接口所在文件目录创建一个UserDaoMapper.xml的配置文件,配置如下:

<?xml version="1.0" encoding="UTF-8" ?>   <!DOCTYPE mapper   PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"  "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.majing.learning.mybatis.dao.UserDao"><select id="findUserById" resultType="com.majing.learning.mybatis.entity.User">select * from user where id = #{id}</select></mapper>

配置文件中通过id指定了方法和sql语句的对应关系,并且将返回结果指定为User实体。

至此,一个简单的示例所需要的东西都出来了,我们写个简单的测试类来看下怎么查询。

package com.majing.learning.mybatis;import java.io.IOException;import junit.framework.Assert;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import com.majing.learning.mybatis.dao.UserDao;import com.majing.learning.mybatis.entity.User;public class UserDaoTest {@Testpublic void findUserById(){SqlSession sqlSession = getSessionFactory().openSession();  UserDao userMapper = sqlSession.getMapper(UserDao.class);  User user = userMapper.findUserById(1);  System.out.println(user);Assert.assertNotNull("没找到数据", user);}// Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与数据库进行交互private static SqlSessionFactory getSessionFactory() {SqlSessionFactory sessionFactory = null;String resource = "configuration.xml";try {sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));} catch (IOException e) {e.printStackTrace();}return sessionFactory;}}

从测试用例代码中,我们看到我们查询一个用户其实只用到了三条语句,也就是下面:

SqlSession sqlSession = getSessionFactory().openSession();  UserDao userMapper = sqlSession.getMapper(UserDao.class);  User user = userMapper.findUserById(1);  

是不是比之前繁琐的Java代码好多了,反正我这么觉得。至此,一个入门的简单说明到此为止,后面我们陆续学习Mybatis的一些常用功能。接下来一篇文章会简单说明下mybatis如何实现增删改查基本功能。


如果想了解我最新的博文,请关注我的博客,谢谢。

如果您觉得博主不容易奋斗,并且愿意打赏我,可扫描下方二维码,对您的打赏我表示感谢。吐舌头


0 0