MyBatis基本配置与测试

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
是一个半自动化的ORM(对象关系映射)框架。
Maven

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>

Compile Dependencies (8)

这里写图片描述
来源: http://mvnrepository.com/artifact/org.mybatis/mybatis/3.4.1

MyBatis使用基本流程

1、导入相关jar包
2、编写mybatis核心配置文件(mybatis-config.xml)
3、创建SqlSessionFactory,以及获取SqlSession对象
4、创建与数据表对应的实体类
5、SQL语句映射文件,并将映射文件在核心配置文件中配置
6、编写Dao
7、测试

举例说明:
2:核心文件(名字可任意eg: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>
    <!-- 数据库连接的基本配置信息 -->
    <environments default="development">
        <environment id="development">
<!-- JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接, closeConnection 属性设置为 false 来阻止它默认的关闭行为。 -->
            <transactionManager type="JDBC" />
<!--UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。这是一种使得并发 Web 应用快速响应请求的流行处理方式。
JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/dbtest?serverTimezone=UTC" />
                <property name="username" value="root" />
                <property name="password" value="asd123asd" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/hgs/ssm/UserMapper.xml" />
    </mappers>
</configuration>

NOTE:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

映射文件配置方式:

<!-- Using classpath relative resources -->
<mappers>
    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
    <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- Using url fully qualified paths -->
<mappers>
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    <mapper url="file:///var/mappers/BlogMapper.xml"/>
    <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- Using mapper interface classes -->
<mappers>
    <mapper class="org.mybatis.builder.AuthorMapper"/>
    <mapper class="org.mybatis.builder.BlogMapper"/>
    <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers>
    <package name="org.mybatis.builder"/>
</mappers>

来源: http://www.mybatis.org/mybatis-3/zh/configuration.html

3:创建SqlSessionFactory,以及获取SqlSession对象

public class MyBatisUtils {
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }
    public static SqlSession getSession() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        return sqlSessionFactory.openSession();
    }
}

5:SQL语句映射文件(名字随便起但要与配置文件中的一致)
eg:下面是配置文件中的映射配置

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

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">
<mapper namespace="com.hgs.ssm.UserMap">
    <select id="selectUser" resultType="com.hgs.ssm.User">
        select * from User where id = #{id}
    </select>
    <select id="selectAllUser" resultType="com.hgs.ssm.User">
        select * from User
    </select>
    <insert id="insertUser" parameterType="com.hgs.ssm.User">
        insert into User(nickname,password) values(#{nickname},#{password})
    </insert>
    <delete id="deleteUser" parameterType="com.hgs.ssm.User">
        delete  from User where id = #{id}
    </delete>
</mapper>

namespace命名空间防止sql语句的id重名
namespace 命名规则 包名+类名/包名+mapper文件名
parameterType 指sql语句参数类型
resultType 返回结果类型
useGeneratedKeys = “true” 使用自增主键

6:编写Dao

package com.hgs.ssm;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.hgs.ssm.mybatis.MyBatisUtils;
public class UserDao {
    public List<User> getAllUser() throws IOException {
        SqlSession session = MyBatisUtils.getSession();
        //现在的方式,通过接口
        UserMap userMap = session.getMapper(UserMap.class);
        List<User> list = userMap.selectAllUser();
        session.close();
        return list;
    }

    public User getUser(String id) throws IOException{
        SqlSession session = MyBatisUtils.getSession();
        //以前的方式
        User user = session.selectOne("com.hgs.ssm.UserMap.selectUser",id);
        session.close();
        return user;
    }
    public void delete(String id) throws IOException{
        SqlSession session = MyBatisUtils.getSession();
        UserMap userMap = session.getMapper(UserMap.class);
        userMap.deleteUser(id);
        session.commit();
        session.close();
    }

    public void insert(String nickname,String password) throws IOException{
        SqlSession session = MyBatisUtils.getSession();
        UserMap userMap = session.getMapper(UserMap.class);
        userMap.insertUser(nickname, password);
        session.commit();
        session.close();
    }
}

UserMap接口:

package com.hgs.ssm;
import java.util.List;
/**
 * 
 * @author Administrator UserMap名字一定要与namespace的一致,否则报is not known to the
 *         MapperRegistry 其方法也要与id一致 这接口相当于UerMapper映射器的接口版
 */
public interface UserMap {
    User selectUser(int id);
    List<User> selectAllUser();
    void deleteUser(String id);
    void insertUser(String nickname,String password);
}

分页查询
select o.* from (sql) o limit firstIndex,pageSize
方式一:RowBounds实现分页
方式二:在映射文件中sql语句配置实现分页

*Spring整合MyBatis时,不需要再自己去封装得到sqlSession了,在MyBatis-spring包中封装了SqlSessionTemplate类,可以直接得到sqlSession。

测试

public class Test {
    public static void main(String[] arg) throws IOException {
        // SqlSession session = MyBatisUtils.getSession();
        // User user = session.selectOne("com.hgs.ssm.UserMap.selectUser",2);
        // System.out.println(user);
        // UserMap userMapper = session.getMapper(UserMap.class);
        // User u = userMapper.selectUser(1);
        // System.out.println(u);
        // session.close();
        UserDao uDao = new UserDao();
//      User user = uDao.getUser("8");
//      System.out.println(user);
        //query
//      List<User> uList = uDao.getAllUser();
//      for (User u : uList) {
//          System.out.println(u);
//      }
    //  uDao.insert("hgs", "asd123asd");
//      
//      SqlSession session = MyBatisUtils.getSession();
//      UserDaoImpl userDaoImpl= session.getMapper(UserDaoImpl.class);
//      User mUser = new User();
//      mUser.setNickname("lvan");
//      mUser.setPassword("admin");
//      userDaoImpl.insertUser(mUser);
//      List<User> uList = userDaoImpl.getAllUser();
//      for (User u : uList) {
//          System.out.println(u);
//      }
//      session.commit();
//      session.close();    
        Map<String,String> map = new HashMap<String, String>();
        map.put("nickname", "hgs");
        //map.put("id","1");
        List<User> user = uDao.getUserList(map);
        for (User uu : user) {
            System.out.println(uu);
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值