初识MyBatis(一)

5 篇文章 0 订阅
3 篇文章 0 订阅

最近在研究一些框架,刚好用到了MyBatis 顺便记录一下吧。

什么是 MyBatis ?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
上面是官方的介绍,说白了就是用它来操作数据库 以前都是用JDBC直接操作的,现在MyBatis 又进行了一些封装处理使我们可以省去不少操作。

下面我我使用的开发工具为IntelliJ IDEA ,网上的教程多数是eclipse 或IntelliJ IDEA 使用的Maven,这里我只用的是Gardle 。关于IntelliJ IDEA 和Gardle 我就不多说了直接建项目入手。

新建一个项目
在这里插入图片描述
我这里建立了一个空项目
在这里插入图片描述
然后在空项目中建立一个,点击项目处新建如下:
在这里插入图片描述
这里选择什么看自己的需求,我目前只是建立一个java 程序来测试:
在这里插入图片描述
下面填写信息
在这里插入图片描述
然后项目名和项目存放的路径:
在这里插入图片描述
创建完之后项目中什么都没有需要我们手动创建
在这里插入图片描述
现在里面建一个src 文件
在这里插入图片描述
然后在src里面创建main文件
在这里插入图片描述
然后里面建立对应的java文件或kotlin文件,在里面建立包命名就可以了。
下面看我们应用的包,在build.gradle

dependencies {
    compile 'org.mybatis.generator:mybatis-generator-core:1.3.5'
    compile 'mysql:mysql-connector-java:5.1.40' /*指定数据库,这里用的是mysql*/
    compile 'tk.mybatis:mapper:3.3.9'
    compile 'org.mybatis:mybatis:3.2.6'
}

项目的build.gradle里面我引用阿里的镜像地址:

  repositories {
        maven{ url "http://maven.aliyun.com/nexus/content/groups/public/"}
        mavenCentral()
        jcenter()
    }

我这里还用到了kotlin 所用有相应的引用

 dependencies {
        classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: SPRING_BOOT_VERSION
        classpath group: 'org.jetbrains.kotlin', name: 'kotlin-gradle-plugin', version: KOTLIN_VERSION
        classpath group: 'org.jetbrains.dokka', name: 'dokka-gradle-plugin', version: DOKKA_VERSION
    }

然后我们开始写我们的配置文件了,首先要在main文件下建一个文件resources
在这里插入图片描述

IntelliJ IDEA 中必须把所有的.xml文件都放在resources文件下,否则会不识别,所以这里注意一下

在resources 新建一个generatorConfig.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="${driver}"/>
<!--数据库连接地址-->
<property name="url" value="${url}"/>
<!--数据库用户名-->
<property name="username" value="${username}"/>
<!--数据库用户密码-->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

<!--定义映射文件-->
    <mappers>
        <!--指定某一个文件路径-->
        <mapper resource="BlogMapper.xml"/>
    </mappers>
</configuration>

映射文件mappers 这里我在 resources中建了BlogMapper.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="com.wx.test.mybatis.mapper.BlogMapper">
    <!--查询语句 statement              resultType 别名  -->
    <select id="selectBlog" parameterType="int" resultType="Blog">
      select * from blogtest where id = #{id}
</select>
</mapper>

上面可以看到是一个查询语句,没错,MyBatis的查询是在这里面做的然后我们建立对应的接口类:
在这里插入图片描述

/**
 * 接口
 */
public interface BlogMapper {

    Blog selectBlog(Integer id);
}

上面是和BlogMapper.xml 中对应写的查询方法,再建立一个帮助类,这里我直接贴出来:

/**
 * 工具类
 * 从 从 SqlSessionFactory  中获取 SqlSession
 */
public class MyBatisUtil {

    private static SqlSessionFactory sqlSessionFactory = null;

    static {
//        String resource = "org/mybatis/example/Configuration.xml";
        Reader reader = null;
        try {
            // 读取.xml的配置
            reader = Resources.getResourceAsReader("generatorConfig.xml");
            sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private  MyBatisUtil(){
    }
    public static SqlSession getSqlSessionFactory(){
        return sqlSessionFactory.openSession();
    }

}

上面我们可以看出读取了.xml中的配置连接数据库,我这里数据库是已经建好的
在这里插入图片描述
表明
在这里插入图片描述
然后建立对应的实体类:

public class Blog {

    private int id;
    private String name;
    private String codeId;

    public String getCodeId() {
        return codeId;
    }

    public void setCodeId(String codeId) {
        this.codeId = codeId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

建立一个单元测试文件,建立测试类:
在这里插入图片描述
对应写一个方法:

public class BlogTest {

    /**
     * 查询id
     */
    @Test
    public void testSelectBlog(){
        SqlSession sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        BlogMapper mapper = sqlSessionFactory.getMapper(BlogMapper.class);
        Blog blog = mapper.selectBlog(1);
        System.out.println("数据库名="+blog.toString());
        sqlSessionFactory.close();
    }
}

点击运行就可以了
在这里插入图片描述

我们发现打印出来的有一个属性没有值?
在这里插入图片描述
发现原来是实体类中的名字和数据库中的字段名不符合,一个是codeId,一个是code_id,有些时候我们并不能把他们写的一模一样,有可能是几个单词组合起来的,所以java命名是驼峰式的,数据库是-分开的,这里我们就要处理一下了。
大家都知道SQL中有个别名的方法,那需要我们把所有的字段都出来,字段少了还可以,多了就比较麻烦了:
别名

 <select id="selectBlog" parameterType="int" resultType="Blog">
      select id,
        name,
        code_id as codeId
       from blogtest where id = #{id}
</select>

利用as给个别字段起个别名,在MyBatis中我们还有一个方法resultMap,我们只需要指定需要改变的字段就可以:

 <resultMap id="blogResultMap" type="Blog">
        <result column="code_id" property="codeId"/>
    </resultMap>

然后在对应的地方引用就可以了:

改之前:resultType="Blog"
<select id="selectBlog" parameterType="int" resultType="Blog">
      select * from blogtest where id = #{id}
</select>
改之后:resultType="blogResultMap"
<select id="selectBlog" parameterType="int" resultMap="blogResultMap">
      select * from blogtest where id = #{id}
</select>

简单的查询语句已经完成了,今天就到这里了,明天继续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值