关于mybatis两种连接mysql的方式(注解和xml配置)

之前没接触过mybatis,这次公司做项目用的是mybatis连接数据库,自己回去学了后是xml配置的,但大家都说注解可能更明了一些,所以我就都总结一下。

准备工作:新建Java项目(新建web项目还是J2SE的都可以,我这边新建的是普通的Java项目),引入两个jar包:mybatis-3.4.5.jar 和 mysql-connector-java-5.1.44-bin.jar,并且add to Build Path。

一.xml配置:

介绍:
mybatis通过xml配置来连接数据库,其实主要是两个xml,第一个是数据库配置的xml,即config.xml文件,它是告诉程序,要连哪个数据库,数据库的地址用户名密码啥的都在这,数据库到时候会执行什么操作呢,这个它告诉你:我看的是哪个对应的mapper的xml文件说要干啥。那第二个xml文件当然就是我们自己配置的mapper的xml文件了,里面写我们到时候会要求数据库执行的操作。
步骤:
1.新建个文件夹,放xml这些配置文件(也可以不新建,主要是为了显得整齐点)【我的整个项目的目录结构如下:】
目录结构

我使用到的数据库是:
数据库表的格式

2.新建config.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--这是说明引用的是mybatis框架,不用管这个 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置管理器 -->
<configuration>
    <!-- 配置数据库连接信息 -->
    <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC" />
           <dataSource type="POOLED">
              <property name="driver" value="com.mysql.jdbc.Driver" />
              <property name="url" value="jdbc:mysql://localhost:3306/test" />
              <property name="username" value="root" />
              <property name="password" value="root" />
           </dataSource>
       </environment>
    </environments>
    <!-- 映射文件定位 -->
    <!--这个就是说一下,要执行的sql语句的xml文件在哪,这里可以写相对路径也可以写绝对路径,绝对路径就是url,相对路径使用resource-->
    <mappers>
       <mapper url = "file:Users/knight/letian-workspace/testMybatis/conf/mapper.xml" />

    </mappers>
</configuration>

3.新建mapper.xml文件:
(这里面就是写sql语句,然后说明它的传入参数的类型,返回参数的类型,在程序中调用这个sql的时候,调用的一个标识等等)
(我这里只是实现一个查询用户名的功能)

<?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">
<!-- 如果需要访问这条sql语,需要通过其唯一标识访问到 唯一标识就是 namespace+id的组合 -->
<mapper namespace="com.knight.main.mapper">
    <!-- mapper标签下有select、update、delete、insert,根据你要执行的sql语句选择正确的标签 -->
    <select id="name" parameterType="int" resultType = "String">
    select name from Person where id = #{id};
    </select>
</mapper>

4.新建HelloMybatis.java文件,开始连接mysql:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class HelloMybatis {
    public static void main(String[] args) {
        //mybatis的配置文件
        String resource = "./conf/config.xml";
        /**
         * 然后把这个配置文件转成InputStream给SqlSessionFactory
         */
        InputStream is = null;
        try {
            is = new FileInputStream(resource);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        //构建sqlSession的工厂

        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * com.knight.main.mapperr是mapper.xml文件中mapper标签的namespace属性的值,
         * name是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
        String statement = "com.knight.main.mapper.name";//映射sql的标识字符串
        //执行查询返回结果
        String user = session.selectOne(statement, 3);
        System.out.println(user);
    }
}

二、注解:

我继续在这个项目里写了,然后新建个包就行:
注解方式
(还是实现根据id查询用户名的功能)
注解呢,就是定义个接口,里面写好要执行的sql,然后以一个方法的方式来返回结果。
1.定义接口Mapper.java:

package com.knight.annotation;

import org.apache.ibatis.annotations.Select;

//定义sql映射的接口,使用注解指明方法要执行的SQL
public interface Mapper {
    //使用@Select注解指明getName方法要执行的SQL
    @Select("select name from Person where id = #{id};")
    public String getName(int id);
}

2.在config.xml文件里去注册,也就是告诉程序这个接口在哪,在原先的config.xml文件的mappers标签里加上:

<!-- 注册Mapper映射接口-->
    <mapper class = "com.knight.annotation.Mapper" />

完整的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>
    <!-- 配置数据库连接信息 -->
    <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC" />
           <dataSource type="POOLED">
              <property name="driver" value="com.mysql.jdbc.Driver" />
              <property name="url" value="jdbc:mysql://localhost:3306/test" />
              <property name="username" value="root" />
              <property name="password" value="root" />
           </dataSource>
       </environment>
    </environments>
    <!-- 映射文件定位 -->
    <!--这个就是说一下,要执行的sql语句的xml文件在哪,这里可以写相对路径也可以写绝对路径,绝对路径就是url,相对路径使用resource-->
    <mappers>
      <!-- <mapper url = "file:Users/knight/letian-workspace/testMybatis/conf/mapper.xml" /> -->
       <!-- 注册Mapper映射接口-->
    <mapper class = "com.knight.annotation.Mapper" />
    </mappers>
</configuration>

3.编写AnnotationMybatis.java文件:

package com.knight.annotation;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class AnnotationMybatis {
    public static SqlSession getSqlSession() {
        String resource = "./conf/config.xml";
        InputStream is = null;
        try {
            is = new FileInputStream(resource);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        return sessionFactory.openSession();
    }
    public static void main(String[] args) {
        SqlSession sqlSession = getSqlSession();
        //得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
        Mapper mapper = sqlSession.getMapper(Mapper.class);
        //执行查询操作,将查询结果自动封装成User返回
        String name = mapper.getName(3);
        //使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();
            System.out.println(name);

    }
}

总结

其实xml配置和注解只是调用形式不一样罢了,不过注解确实看起来整齐一些。
以上两个例子是在写博客的时候,边写博客,边写例子的,所以都亲测可以运行通过。
欢迎大家交流沟通!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值