MyBatis

一、在pom.xml文件中导入依赖

1、mybatis

2、mysql-connector-java

3、junit:单元测试

<dependencies>
    <dependency>
    <!--mybatis依赖-->
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>
    <dependency>
    <!--mysql驱动依赖-->
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

 二、创建Mybatis核心配置文件

注:transaction n.事务
transactionManager  n.事务管理器

MyBatis核心配置文件的名字由自己命名,这里命名为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>
        <package name="com.liu.pojo"/>
    </typeAliases>

    <!--environments:可以配置多个environment,例如development,test,通过default属性切换不同的environment。-->
    <environments default="development">
        <!--environment:配置数据库连接信息-->
        <environment id="development">
            <!-- transactionManager:默认JDBC -->
            <transactionManager type="JDBC"/>
            <!-- dataSource:使用连接池,并加载mysql驱动连接数据库 -->
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db2?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="liu200328"/>
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
       </environment>
    </environments>

    <mappers>
        <!--mapper:指定sql映射文件-->
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>

关于配置文件的每一个属性详解,可以在官方文档中看到:配置_MyBatis中文网

下面来介绍一下上面用的到的几个属性: 

1、typeAliases(类型别名)

(1)给一个全限定类名配置别名

因为java类的全限定类名太长了,我们希望有一个简称来指代它,这个功能仅用于 XML 配置。

例如下面这个例子,这样配置完成之后,在任何需要使用com.liu.mapper.User的地方,直接使用别名User即可。

<typeAliases> 
    <typeAlias alias="User" type="com.liu.mapper.User"/>
</typeAliases>

(2)如何快速给很多java类的全限定类名起别名?

可以指定一个包名,会为包中的每一个类提供一个类首字母小写的别名, 比如com.liu.mapper.User默认别名为user,MyBatis会在包名下面扫描需要的类,代码如下:

<typeAliases>
  <package name="com.liu.mapper"/>
</typeAliases>
2、配置数据库连接环境信息

(1)environments:可以配置多个environment,例如development,test,通过default属性切换不同的environment。

(2)environment:配置数据库连接信息。

(3)transactionManager:事务管理器,默认JDBC。

(4)dataSource:使用连接池,并加载mysql驱动连接数据库。

3、指定sql映射文件的位置

(1)使用相对于类路径的资源引用 

    <mappers>
        <mapper resource="com/liu/mapper/UserMapper.xml"/>
    </mappers>

(2)使用完全限定资源定位符(URL)

固定格式:file:///+绝对路径

    <mappers>
        <mapper url="file:///D:\JavaWorkspace\Login_Register\src\main\resources\com\liu\mapper\UserMapper.xml"/>
    </mappers>

 (3)使用映射器接口实现类的完全限定类名

    <mappers>
        <mapper class="com.liu.mapper.UserMapper.xml"/>
    </mappers>

(4)通过package引入映射文件

当需要引入的映射文件很多时,一个个引入很麻烦,通过包一下引入全部的映射文件,当需要哪个时通过包扫描便可以找到。

    <mappers>
        <mapper package="com.liu.mapper"/>
    </mappers>

三、创建sql映射文件

元素名称描述备注
mapper映射文件的根节点,只有 namescape 一个属性namescape 作用如下:①用于区分不同的 mapper,全局唯一②绑定DAO接口,即面向接口编程。当 namescape 绑定某一接口后,可以不用写该接口的实现类,MyBatis 会通过接口的完整限定名查找到对应的 mapper 配置来执行 SQL 语句。因此 namescape 的命名必须要跟接口同名。
select查询语句,最常用、最复杂的元素之一可以自定义参数,返回结果集等
insert插入语句执行后返回一个整数,代表插入的条数
update更新语句执行后返回一个整数,代表更新的条数
delete删除语句执行后返回一个整数,代表删除的条数
sql允许定义一部分的 SQL,然后在各个地方引用它例如,一张表列名,我们可以一次定义,在多个 SQL 语句中使用
resultMap用来描述数据库结果集与对象的对应关系,它是最复杂、最强大的元素提供映射规则
cache配置给定命名空间的缓存-
cache-ref其它命名空间缓存配置的引用-
parameterMap定义参数映射关系

即将被删除的元素,不建议使用

<?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.liu.mapper.UserMapper">
    <select id="selectUser" resultType="user">
        select *
        from tb_user
        where username = #{username} and password = #{password}
    </select>
</mapper>

(1)namespace的为接口的全限定名称

(2)<select> 元素表明这是一条查询语句,属性 id是这条 SQL语句的唯一标识。resultType表示返回的是一个User类的值,这里给的值是user是因为步骤二1中起的别名。

(3)参数符号#{}和${}

#{} 告诉 MyBatis 创建一个预编译语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个 “ ? ” 来标识,并被传递到一个新的预编译语句中,就像这样:

// 近似的 JDBC 代码,非 MyBatis 代码...
String selectUser = " select * from t_user where id = ? ";
PreparedStatement ps = conn.prepareStatement(selectUser);
ps.setInt(1,id);

#{} 作为占位符,${} 作为替换符,两者没有孰轻孰重,只不过应用场景不同,适当取舍即可。

我们希望完成类似 JDBC 中的 PrepareStatement 预编译处理 ,可以使用 #{} ,它会在替换占位符时首尾添加上单引号 '' ,能有效防止 SQL 注入 风险。

四、定义与映射文件同名的接口

(1)sql映射文件与同名接口在同一目录下:

接口文件放在java目录下的com.liu.mapper包下,这里创建包以.分割:

sql映射文件放在resource目录下的com.liu.mapper包下,这里创建包以/分割:

Note:"." in the name is treated as a regular character.Use!"instead if you mean to create nested directories

(2)在接口中定义了与xml映射文件select语句的属性id同名的接口方法,注意是否需要传参。 

public interface UserMapper {
    User selectUser(@Param("username") String username, @Param("password")String password);
}

五、使用

//加载mybatis核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);

SqlSession sqlSession = build.openSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUser(username, password);

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值