从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

mybatis

 

  下载:https://github.com/mybatis/mybatis-3/releases

  API:https://mybatis.org/mybatis-3/zh/getting-started.html

 

  持久层框架

  (Spring的JdbcTemplate、Apache的DBUtils是工具类,是对JDBC的简单封装)

  mybatis内部封装了jdbc,使用mybatis只需要关注sql语句本身,不需要关注加载驱动、创建连接等过程。使用ORM思想实现对结果集的封装。

 

  ORM:object relational mapping 对象关系映射

 

1. 使用

  maven项目

  1.1 添加jar

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
    <scope>compile</scope>
</dependency>

 

  1.2 配置

(1)数据源配置

<?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="mysql">
        <!--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/contacts?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射配置文件(每个dao独立的配置文件)的位置-->
    <mappers>
        <mapper resource="com/xt/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

 

(2)dao接口的映射文件

  UserDao.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.xt.dao.UserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.xt.domain.User">
        select * from user
    </select>
</mapper>

  文件名与接口名相同;

  映射文件在resource目录下与dao接口同样的目录结构下

  namespace为接口位置

  id为方法名

  resultType为相对应的数据模型类

 

  1.3 简单例子如下

  数据模型为User:

public class User implements Serializable {
    //成员变量
    xxx
    //getter、setter方法
    xxx
}

  接口为UserDao:在接口映射配置文件里写了sql语句,以及标定了返回值类型,于是不用自己写dao的实现类了

public interface UserDao {

    /*查找所有user*/
    List<User> findAll();
}

 

  主方法:

//1.读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory(通过其构建工厂对象)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.使用工厂创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.创建dao接口的代理对象
UserDao dao = sqlSession.getMapper(UserDao.class);
//5.通过代理对象调用方法
List<User> list = dao.findAll();

for(User user:list) {
    System.out.println(user.toString());
}

//6.关闭
sqlSession.close();
is.close();

 

 

2. 使用注解的方式

  删掉接口映射文件 UserDao.xml

  修改SqlMapConfig.xml文件:修改mapper

<!-- <mapper resource="com/xt/dao/UserDao.xml"></mapper>-->
<mapper class="com.xt.dao.UserDao"></mapper>

  在接口上添加注解:

  UserDao.java

public interface UserDao {

    /*查找所有user*/
    @Select("select * from user")
    List<User> findAll();
}

 

 

3. 其它问题

  查询用select标签;插入数据用insert标签;删除用delete标签

  在mapper代理对象调用完方法后,需要执行  sqlSession.commit()  提交事务,数据才能进到数据库,否则数据可能会回滚

 

  

 

posted @ 2020-05-31 07:14  T,X  阅读(160)  评论(0编辑  收藏  举报