mybatis mysql 配置文件_MyBatis配置文件中的常用配置

一、连接数据库的配置单独放在一个properties文件中

之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

48304ba5e6f9fe08f3fa1abda7d326ab.png

其实我们完全可以将数据库的连接配置信息写在一个properties文件中,然后在conf.xml文件中引用properties文件,具体做法如下:

1、在src目录下新建一个db.properties文件,如下图所示:

7207d5a71dccfc244d5c3a5a47ad1a9d.png

在db.properties文件编写连接数据库需要使用到的数据库驱动,连接URL地址,用户名,密码,如下:

1 driver=com.mysql.jdbc.Driver2 url=jdbc:mysql://localhost:3306/mybatis3 name=root4 password=XDP

2、在MyBatis的conf.xml文件中引用db.properties文件,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6

7

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

48304ba5e6f9fe08f3fa1abda7d326ab.png

二、为实体类定义别名,简化sql映射xml文件中的引用

之前,我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名+类名),如下:

insert into users(name,age) values(#{name},#{age})

parameterType="me.gacl.domain.User"这里写的实体类User的全类名me.gacl.domain.User,每次都写这么一长串内容挺麻烦的,而我们希望能够简写成下面的形式

insert into users(name,age) values(#{name},#{age})

parameterType="_User"这样写就简单多了,为了达到这种效果,我们需要在conf.xml文件中为实体类="me.gacl.domain.User"定义一个别名为"_User",具体做法如下:

在conf.xml文件中标签中添加如下配置:

这样就可以为me.gacl.domain.User类定义了一个别名为_User,以后_User就代表了me.gacl.domain.User类,这样sql映射xml文件中的凡是需要引用me.gacl.domain.User类的地方都可以使用_User来代替,这就达到了一个简化实体类引用的目的。

除了可以使用这种方式单独为某一个实体类设置别名之外,我们还可以使用如下的方式批量为某个包下的所有实体类设置别名,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

就表示为这个包下面的所有实体类设置别名。MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名,比如me.gacl.domain.User这个实体类的别名就会被设置成User。

三、mappers(映射器)

mapper用于,引入MyBatis关于数据库操作的映射。Mapper配置的几种常见的方法

3.1 使用相对类路径的资源

3.2 使用Mapper接口的类路径(要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中)

95ba3a91e5660ac94a774bcf10fc268f.png

3.3 注册指定包下的mapper接口(要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中)

95ba3a91e5660ac94a774bcf10fc268f.png

四、Java代码

首先创建DBHelper,用于封装SqlSessionFactory

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagezdsoft.common;importjava.io.IOException;importjava.io.InputStream;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;public classDBHelper {//GC不理static

private static SqlSessionFactory factory = null;public static SqlSessionFactory getSqlSessionFactory() throwsIOException {if (factory == null) {

String resource= "mybatis-config.xml";

InputStream inputStream=Resources.getResourceAsStream(resource);

factory= newSqlSessionFactoryBuilder().build(inputStream);

}returnfactory;

}//获得会话

public static SqlSession getSession() throwsIOException {return getSqlSessionFactory().openSession(true);

}/*** 获得得sql会话

*

*@paramisAutoCommit

* 是否自动提交,如果为false则需要sqlSession.commit();rollback();

*@returnsql会话

*@throwsIOException*/

public static SqlSession getSession(boolean isAutoCommit) throwsIOException {returngetSqlSessionFactory().openSession(isAutoCommit);

}

}

View Code

然后单元测试代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Testpublic void testInsert() throwsIOException {//获取session

SqlSession session =DBHelper.getSession();//获取mapper接口的代理对象

StudentMapper studentMapper = session.getMapper(StudentMapper.class);//调用代理对象方法

Student stu = newStudent();

stu.setId(3);

stu.setName("中华人民共和国");

stu.setAge(100);

studentMapper.insert(stu);//关闭session

session.close();

}

View Code

五、知识点的总结

1、  #{}和${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换.#{}可以有效防止sql注入。#{}可以接受简单类型或者pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。${}也可以接收pojo数据,可以使用OGNL解析出pojo的属性值.缺点:不能防止sql注入。

2、  parameterType和resultType

parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。

resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。

说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值