Mybatis笔记(一)

Mybatis笔记(一)

  1. iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  2. 原理框图:
  3. 新建lib文件夹,存放使用的jar包。新建config包存放配置文件
  4. 使用到的包,mybatis3,mysql-connector
  5. 在config下创建log4j.properties文件,用于控制台输出信息
# Global logging configuration
#开发环境设置为debug,生产环境设置成info或者error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6.在config下创建db.properties,写入数据库的配置信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=root

7.在config下创建一个目录mybatis存放mybatis的配置文件SqlMapConfig.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>
    <!-- 加载数据库配置文件db.properties -->
    <properties resource="db.properties">
    </properties>

    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis -->
        <transactionManager type="JDBC"/>
        <!-- 数据库连接池  -->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <!-- 通过resource加载单个映射文件 -->
        <mapper resource="sqlmap/User.xml"/>
    </mappers>
</configuration>

8.使用原始dao开发
在config下创建一个sqlMap目录存放映射文件User.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">
<!-- namespace命名空间,作用就是对sql进行分类化管理  -->
<mapper namespace="test">
    <!-- 在映射文件中配置很多sql语句 -->
    <!-- 将sql语句封装到mappedStatement对象中,所以id成为statement的id -->
    <!-- parameterType指定输入参数的类型 -->
    <!-- #{}表示占位符 -->
    <!-- #{id}:其中id表示接入输入的参数,参数名称就是id
        如果输入参数类型是简单类型,这个名字可以是value或者其他-->
    <!-- resultType 指定 sql输出记录 所映射的类型 -->
    <!-- select 表示单条记录所映射的java对象 -->
    <select id="findUserById" parameterType="int" resultType="com.fyh.mybatis.pojo.User">
        SELECT * FROM User where id=#{value}
    </select>
</mapper>

10 . 创建pojo用于接收数据的类型:

  • 数据表User:
/*
Navicat MySQL Data Transfer

Source Server         : 本机mysql
Source Server Version : 50547
Source Host           : localhost:3306
Source Database       : jdbctest

Target Server Type    : MYSQL
Target Server Version : 50547
File Encoding         : 65001

Date: 2018-01-15 12:51:47
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_user_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('2', '王一百', '1994-05-06 00:00:00', 'M', '义乌');
INSERT INTO `user` VALUES ('4', '吴王尔', '1996-01-01 00:00:00', 'F', '东站');
INSERT INTO `user` VALUES ('5', '范特西', '2018-01-13 15:16:16', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('6', '王三', '1978-07-07 00:00:00', 'M', '杭州');
INSERT INTO `user` VALUES ('7', '范特西', '2018-01-13 15:36:40', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('8', '范玉衡', '2018-01-13 15:37:34', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('11', '范特西的', '2018-01-13 19:00:02', 'M', '金华桥儿头');
  • User.java
package com.fyh.mybatis.pojo;

import java.util.Date;

public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

10.创建DAO层:

  • 建立DAO接口
  • UserDAO.java:
package com.fyh.mybatis.dao;

import com.fyh.mybatis.pojo.User;

public interface UserDAO {
    public User findUserById(Integer id) throws Exception;
}
  • 建立接口实现类
  • UserDAOImp.java:
package com.fyh.mybatis.dao;

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

import com.fyh.mybatis.pojo.User;

public class UserDAOImp implements UserDAO{

    private SqlSessionFactory sqlSessionFactory = null;
    //通过构造函数注入SqlSessionFactory
    public UserDAOImp(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User findUser(Integer id) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //第一个参数是statement的id:namespace.id找到对应的statement
        //第二个参数是传入statement的参数
        User user = sqlSession.selectOne("test.findUserById",id);
        return user;
    }
}

11.创建测试:

  • UserDAOImpTest.java:
package com.fyh.mybatis.dao;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.fyh.mybatis.pojo.User;

public class UserDAOImpTest {
    private SqlSessionFactory factory = null;
    @Before
    public void setUp() throws Exception {
//      需要手动注入工厂
        String resource = "mybatis/SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        factory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        UserDAO userDAO = new UserDAOImp(factory);
        //查找2号user
        User user = userDAO.findUser(2);

        System.out.println("id\tusername\tsex\tbirthday\taddress");
        System.out.print(user.getId()+"\t");
        System.out.print(user.getUsername()+"\t");
        System.out.print(user.getSex()+"\t");
        System.out.print(user.getBirthday()+"\t");
        System.out.print(user.getAddress()+"\n");

    }

}

12.输出结果:

idusernamesexbirthdayaddress
2王一百MFri May 06 00:00:00 GMT+08:00 1994义乌

13.源代码地址:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值