初识mybatis(二)

举报
江南一点雨 发表于 2021/08/17 00:56:42 2021/08/17
【摘要】 上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置mybatis。关于mybatis的一些基础知识小伙伴们可以参考这篇博客 初识mybatis。另外,上篇博客中,小伙伴们也看到了通过添加jar包的方式来搭建mybatis环境太...

上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置mybatis。关于mybatis的一些基础知识小伙伴们可以参考这篇博客 初识mybatis。另外,上篇博客中,小伙伴们也看到了通过添加jar包的方式来搭建mybatis环境太过于麻烦,so,本文我们还是回归到Maven上吧。OK,废话不多说,开始今天的coding之旅吧。

创建Project并添加Maven支持

我这里以IntelliJ为例来说明如何创建,先创建一个普通的java工程,创建成功之后,选中工程右键单击,选择Add Framework Support,然后选择Maven,点击OK就可以了。添加Maven支持src目录下多了几个文件夹,同时也多了一个pom.xml文件,如下:
这里写图片描述
然后在pom.xml文件中添加相关依赖,我们这里一共添加三个,一个mybatis、单元测试、mysql驱动,如下:

 <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> </dependencies>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

OK,如此我的mybatis环境就搭建好了。接下来我们还是按照上文的顺序来看看要怎么做。

通过xml创建mybatis配置

在创建xml配置文件的时候,对于数据库的配置信息我们可以直接创建一个db.properties文件,然后将数据库的配置信息放入其中,如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=sang
  
 
  • 1
  • 2
  • 3
  • 4

注意,所有的配置文件我们都放在resources文件夹下(小伙伴如果放错了会出现文件找不到的情况,这个时候仔细检查下都很好解决的),如下图:
这里写图片描述
有了数据库配置信息,接下来我们就可以创建mybatis的配置文件了,我这里配置文件取名为mybatis-conf.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> <properties resource="db.properties"/> <typeAliases> <typeAlias type="org.sang.bean.User" alias="user"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="userMapper.xml"/> </mappers>
</configuration>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

关于这个配置文件我说如下几点:

1.第6行我们引入刚刚创建的db.properties文件,方便我们在配置数据库的时候通过${XXX}来直接引用其中的值。

2.第7-9行给我们的User实体类取一个别名,这样在Mapper的配置文件中我们就可以直接使用这里的别名了。

3.从第10行开始配置我们的mybatis运行环境,我们可以在environments节点中配置多个environment,比如开发环境下的environment,生产环境下的environment,然后在environments中通过default属性来选择你要使用哪一种环境。

4.14-17行配置数据库相关属性,通过${XXX}来直接引用db.properties中的值。

5.第21行到23行配置映射器Mapper,下面我们来说说如何创建Mapper

有了这个XML文件,接下来我们就可以通过这个xml文件来获取一个SqlSession了,当然,如上篇博客所述,我们需要把SqlSessionFactory搞成单例模式,所以创建方式如下:

public class DBUtils { private static SqlSessionFactory sqlSessionFactory = null; private static final Class CLASS_LOCK = DBUtils.class; public static SqlSessionFactory initSqlSessionFactory() { InputStream is = null; try { is = Resources.getResourceAsStream("mybatis-conf.xml"); } catch (IOException e) { e.printStackTrace(); } synchronized (CLASS_LOCK) { if (sqlSessionFactory == null) { sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); } } return sqlSessionFactory; } public static SqlSession openSqlSession() { if(sqlSessionFactory==null) initSqlSessionFactory(); return sqlSessionFactory.openSession(); }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

关于这个类我这里就不做过多说明了,小伙伴们有疑问可以参考上篇博客

创建Mapper

上篇博客我们说过Mapper由两部分组成,Java接口+注解或者Java接口+XML配置,我们在上篇博客中使用Java接口+注解的方式来创建了Mapper,那么本文我们就来看看一种更常用的方式Java接口+XML配置的方式。

创建Java接口:

public interface UserMapper { public User getUser(Long id); public int insertUser(User user); public int deleteUser(Long id);
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

小伙伴们注意,这里我并没有给getUser方法添加@Select注解,我们将在xml配置文件中通过xml来解决这个问题,同时我们还添加了两个方法,一个向数据库中添加数据,一个删除数据。

创建配置文件

在resources中创建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="org.sang.db.UserMapper"> <select id="getUser" resultType="user" parameterType="Long"> select * from user where id = #{id} </select> <insert id="insertUser" parameterType="user"> INSERT INTO user(username,password,address) VALUES (#{username},#{password},#{address}) </insert> <delete id="deleteUser" parameterType="Long"> DELETE FROM user where id=#{id} </delete>
</mapper>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

关于这个配置文件我说两点:

1.mapper节点的namespace属性就是UserMapper接口的全路径
2.select节点的id属性就是UserMapper中的方法名称,resultType属性的值是我们在mybatis-conf.xml中定义给User类定义的别名,parameterType是指getUser方法参数的类型。
3.insert节点用来执行数据的插入操作
4.delete节点用来执行数据的删除操作

OK ,最后再给小伙伴们看看我们的实体类,如下:

public class User { private Long id; private String username; private String password; private String address; //省略getter/setter
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

OK,如此之后,我们就可以来测试代码啦。

测试

查询

 @Test public void test1() { SqlSession sqlSession = null; try { sqlSession = DBUtils.openSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUser(1l); System.out.println(user); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

查询结果如下:
这里写图片描述

添加

 @Test public void test2() { SqlSession sqlSession = null; try { sqlSession = DBUtils.openSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); for (int i = 0; i < 3; i++) { userMapper.insertUser(new User(null, "u-" + i, "p-" + i, "a-" + i)); } sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

添加结果:
这里写图片描述

删除

 @Test public void test3() { SqlSession sqlSession = null; try { sqlSession = DBUtils.openSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); int i = userMapper.deleteUser(5l); System.out.println(i); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

删除结果:
这里写图片描述

OK,以上就是我们通过xml配置文件来使用mybatis。

本文案例下载:
本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test27-mybatis3

以上。

参考资料:
1.http://www.mybatis.org/mybatis-3/zh/index.html
2.《深入浅出MyBatis 技术原理与实战》第二章

文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/54425130

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。