MyBatis学习笔记:基本框架简述和配置

这片文章是对自己学习的总结,学习材料是Java EE互联网轻量级框架整合开发 SSM框架(Spring MVC + Spring + Mybatis)和Redis实现。作者是杨开振,周吉文,梁华辉和谭茂华。电子工业出版社出版。


MyBatis简介

MyBatis是用来管理数据库资源的。传统操作数据库的方法比较繁琐,大部分代码用来连接和关闭数据库,而真正的业务代码只占了其中很小的一部分。使用MyBatis之后,开发者就不用花太多时间去管理数据库资源了,只需要专注于业务本身的代码即可。比如我们定义一个UserDao的接口,里面有findAll()方法用来查找所有用户。

public interface UserDao{
    public List<User> findAll();
}

传统的写法是定一个UserDaoImpl实现类实现findAll()方法,然后在业务层才可以调用findAll方法,伪代码如下所示

public class UserDaoImpl implements UserDao{
    public List<User> findAll(){...}
}

public class UserServiceImpl implements UserService{
    public List<User> findAll(){
        return new UserDaoImpl().findAll();
    }
}

其中UserDaoImpl中的findAll方法就必然会涉及到管理数据库资源的代码,数据库的连接,关闭等操作。

如果我们使用Mybatis,就不需要写UserDaoImpl的内容,不存在UserDaoImpl这个类,只需要写一个配置文件,配置文件的关键内容如下所示

<select id="findAll" resultType="com.itheima.domain.User">
    select * from user
</select>

具体什么意思先不用管,只需要注意其中的sql语句。使用Mybatis之后,我们就不用管数据库的资源,只需要专注业务,也就是sql语句,select * from user。

数据库真正的逻辑就写在xml之中,那么我们我们业务层调用持久层的函数就是下面这种写法。

//先不管session是什么,只要知道业务层怎么调用持久层函数就行
SqlSession session = ctx.getBean("session");
List<User> users = userDao.findAll();
//对users进行一些操作

这写法很简单。

 

 


如何配置MyBatis

一般是在资源目录下添加mybatis-config.xml用来专门配置mybatis信息。

首先要先引入mybatis。这段代码基本固定了,以后版本升级的话可能会有一丁点不同。

<?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>标签,mybatis的详细配置信息放在其中,比如数据库配置的信息,定义mysql语句的配置信息。

<configuration>
    ...
</configuration>

下面讲解configuration里的子标签

 

  • <environment>标签

回想使用传统的JDBC方法,第一件事是获取Connection。而获取连接资源需要的参数如下所示

driver = com.mysql.cj.jdbc.driver
url = jdbc:mysql://localhost:3306/mybatis
username = root
password = 1234

这四个参数是获取Connection的必须参数,java语句很麻烦,但是使用Mybatis就比较容易,直接使用<environment>标签就可以。<environments>里就是定义数据库的配置信息。

<environments default="mysql">
    <environment id="mysql">
        <!--配置事务类型-->
        <transactionManager type="JDBC"></transactionManager>
        <!--配置数据源(连接池)-->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="1234"/>
        </dataSource>
    </environment>
</environments>

enviromnets标签下的其它标签暂时不管。

现在数据库资源就配置完成了,接下来就该是配置业务信息。

 

  • <mappers>标签

<mappers>标签下只有一个子标签<mapper>,示例如下。

<mappers>
    <mapper resource="com/itheima/dao/UserDao.xml">
</mappers>

值得注意的信息就是resource,它的值表示之前配置的数据库连接要应用在dao层的哪些类之中。

com.itheima.dao就是目录名,在idea中我们放在resourceces之下,看下图。

UserDao和UserDao.xml的路径要“相对”一致。

那UserDao.xml的作用是什么?前面我们提到Mybatis不需要写UserDao接口的实现类也能实现功能,这是因为具体的实现不是被定义在类中,而是被定义在UserDao.xml中。所以UserDao.xml和UserDao的路径要“相对”一致。

 

接下这篇文章详细说了UserDao.xml里如何定义具体sql逻辑。

 

  • <settings>标签

settings是用来规范整个Mybatis行为的。通过对一些键值对的设定,就可以改变Mybatis的行为。比如说数据库users表中有一列列名为user_id,实体类User中对应的成员变量是userId。Mybatis默认是要将实体类的成员变量和数据库属性名严格对应。比如映射器配置中的语句是

<mapper>
    <select id="com.itheima.dao.UserDao" resultType="com.itheima.domain.User">
        select user_id as userId from users
    </select>
</mapper>

我们必须把user_id重名名为userId(和java实体内完全一样),这样才能将值赋给User类并返回。

但如果我们在<settings>中这样设置。

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

那系统会自动为我们完成名称转化。数据库中的user_id会自动转成驼峰形式userId,user_name会自动转成userName,这样就简化了工作量。

<!--自动驼峰转换-->
<mapper>
    <select id="com.itheima.dao.UserDao" resultType="com.itheima.domain.User">
        select user_id from users
    </select>
</mapper>

待续。。。。。。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值