• Java DB 访问(三)mybatis mapper interface接口


    1 项目说明

    项目采用 maven 组织 ,依赖 mysql-connector-java,org.mybatis,junit pom 依赖如下:

     

    mysql 数据连接 :

    mysql-connector-java

     

    mybatis

    mybatis

     

    junit

    junit 单元测试,本项目采用junit 跑单元测试,4.12 版本采用 @Test注解 测试方法,3.X 版本采用继承来实现测试方法

     

    <dependencies>
    
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    
    <dependency>
    
    <groupId>junit</groupId>
    
    <artifactId>junit</artifactId>
    
    <version>4.12</version>
    
    <scope>test</scope>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.mybatis</groupId>
    
    <artifactId>mybatis</artifactId>
    
    <version>3.4.5</version>
    
    </dependency>
    
    <dependency>
    
    <groupId>mysql</groupId>
    
    <artifactId>mysql-connector-java</artifactId>
    
    <version>5.1.30</version>
    
    </dependency>
    
    </dependencies>

     

    2 项目结构

     

    3 DB 脚本

    DROP TABLE IF EXISTS `account`;
    
    CREATE TABLE `account` (
    
    `id` int(11) NOT NULL AUTO_INCREMENT,
    
    `name` varchar(45) DEFAULT NULL,
    
    `money` decimal(10,0) DEFAULT NULL,
    
    PRIMARY KEY (`id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8;
    
     
    
    -- ----------------------------
    
    -- Records of account
    
    -- ----------------------------
    
    INSERT INTO `account` VALUES ('1', 'hbb0b0', '40000');
    
    INSERT INTO `account` VALUES ('2', 'kael', '1000');

     

    4 代码说明

     MyDataSourceFactory

    package hbb0b0.JavaBasic.mybatis03;
    
     
    
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.apache.ibatis.datasource.DataSourceFactory;
    
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    
    public class MyDataSourceFactory implements DataSourceFactory {
    
     
    
    private Properties prop;
    
     
    
    public DataSource getDataSource() {
    
     
    
    PooledDataSource ds = new PooledDataSource();
    
     
    
    ds.setDriver(prop.getProperty("driver"));
    
    ds.setUrl(prop.getProperty("url"));
    
    ds.setUsername(prop.getProperty("user"));
    
    ds.setPassword(prop.getProperty("password"));
    
     
    
    return ds;
    
    }
    
     
    
    public void setProperties(Properties prprts) {
    
     
    
    prop = prprts;
    
    }
    
     
    
    }

     

    • model
    package hbb0b0.JavaBasic.model;
    
     
    
    import java.io.Serializable;
    
     
    
    public class Account implements Serializable{
    
    private int id;
    
    private String name;
    
    private double money;
    
    public Account() {
    
    super();
    
    }
    
    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 double getMoney() {
    
    return money;
    
    }
    
    public void setMoney(double money) {
    
    this.money = money;
    
    }
    
    @Override
    
    public String toString() {
    
    return "Account [id=" + id + ", name=" + name + ", money=" + money
    
    + "]";
    
    }
    
    }
    • mapper interface
    package hbb0b0.JavaBasic.mybatis03;
    
     
    
    import org.apache.ibatis.annotations.Select;
    
     
    
    public interface AccountMapper {
    
     
    
    @Select("SELECT * FROM Account WHERE id = #{id}")
    
    Account getAccountById(int id);
    
    }
    • session简单封装
    package hbb0b0.JavaBasic.mybatis03;
    
     
    
    import java.util.Properties;
    
     
    
    import javax.sql.DataSource;
    
     
    
    import org.apache.ibatis.mapping.Environment;
    
    import org.apache.ibatis.session.Configuration;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import org.apache.ibatis.transaction.TransactionFactory;
    
    import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
    
     
    
    public class DbTool {
    
    private static SqlSessionFactory m_sessionFactory;
    
    private static void initSessionFactory()
    
    {
    
    Properties prop = new Properties();
    
    prop.setProperty("driver", "com.mysql.jdbc.Driver");
    
    prop.setProperty("url", "jdbc:mysql://localhost:3306/Study");
    
    prop.setProperty("user", "root");
    
    prop.setProperty("password", "sqlsa");
    
     
    
    MyDataSourceFactory mdsf = new MyDataSourceFactory();
    
    mdsf.setProperties(prop);
    
    DataSource ds = mdsf.getDataSource();
    
     
    
    TransactionFactory trFact = new JdbcTransactionFactory();
    
    Environment environment = new Environment("development", trFact, ds);
    
    Configuration config = new Configuration(environment);
    
    config.addMapper(AccountMapper.class);
    
     
    
    m_sessionFactory = new SqlSessionFactoryBuilder().build(config);
    
    }
    
    public static SqlSessionFactory GetSqlSessionFactory()
    
    {
    
    if(m_sessionFactory==null)
    
    {
    
    initSessionFactory();
    
    }
    
    return m_sessionFactory;
    
    }
    
    }
    • JUNit
    package hbb0b0.JavaBasic.mybatis03;
    
     
    
    import static org.junit.Assert.assertNotNull;
    
     
    
    import java.io.IOException;
    
     
    
    import org.apache.ibatis.session.SqlSession;
    
    import org.junit.Assert;
    
    import org.junit.Test;
    
     
    
    import java.lang.System;
    
     
    
    /**
    
    * Unit test for simple App.
    
    */
    
    public class AppTest
    
    {
    
    @Test
    
    public void getOne_Test() throws IOException {
    
    SqlSession session = DbTool.GetSqlSessionFactory().openSession();
    
    try {
    
     
    
    AccountMapper mapper= session.getMapper(AccountMapper.class);
    
     
    
    assertNotNull(mapper);
    
    Account account = mapper.getAccountById(1);
    
    assertNotNull(account);
    
    Assert.assertEquals("hbb0b0",account.getName());
    
    System.out.println(account.toString());
    
     
    
    } finally {
    
    session.close();
    
    }
    
    }
    
     
    
    }

    测试结果:

     

     

     

  • 相关阅读:
    物理层和数据链路层
    Python :Dive Into Python 中文版 读后感_第五章__类与对象
    关于路由器的2种接法
    关于设计模式的一些理解和感悟
    C# 字符串加密
    Sql server 查询锁表和接锁表
    关于中文参数编码的一些文章推荐
    写与悟
    http 返回的状态码以及含义
    js 操作<input type="hidden" runnat="server" id="month">服务器控件
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/8325005.html
Copyright © 2020-2023  润新知