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 ('', 'hbb0b0', '');

INSERT INTO `account` VALUES ('', 'kael', '');

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();

}

}

}

测试结果:

Java DB 访问(三)mybatis mapper interface接口的更多相关文章

  1. Java DB 访问之 mybatis mapper xml 配置方式

    1 项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: mysql 数据连接 : mysql-connector-java ...

  2. springboot访问出错,mapperScan导包错误java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>() at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_172] at java.

    2019-08-06 12:42:03.153 ERROR 10080 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...

  3. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>()

    Caused by: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis ...

  4. Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider

    相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...

  5. 解决java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider

    今天在集成Mapper时 出现如下错误 java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvi ...

  6. Java DB 访问之(四) spring mvc 组合mybatis

    说明 本项目采用 maven 结构,主要演示了 spring mvc + mybatis,controller 获取数据后以json 格式返回数据. 项目结构 包依赖 与说明 pom文件: <p ...

  7. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  8. Java知多少(39)interface接口

    在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”. 接口使用 interface 关键字来声明,可以看做是一种特 ...

  9. Java DB访问之 JDBC

    项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: <dependency> <groupId>my ...

随机推荐

  1. hdu6351 2018 Multi-University Training Contest 5 1002 Beautiful Now

    题意: 给出一个十进制数,数位两两可以交换,给出最多能交换多少次,以及交换后的数不能有前缀0,问能形成最小和最大的数 * * * 尝试的思路 贪心,将字符串先排出最大以及最小的情况,然后按一定顺序将对 ...

  2. MPA(Macro Prudential Assessment)即宏观审慎评估体系

    MPA(Macro Prudential Assessment)即宏观审慎评估体系.2015年12月29日,央行发布公告称,为进一步完善宏观审慎政策框架,更加有效地防范系统性风险,发挥逆周期调节作用, ...

  3. 图解TCP/IP(一)

    IP(Internet Protocol) IP/ICMP -数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递.而一旦跨越多种数据链路,就需要借助网络层. -配备IP的设备,但是不进行路 ...

  4. python模块:shutil

    """Utility functions for copying and archiving files and directory trees. XXX The fun ...

  5. python:OS模块

    r"""OS routines for NT or Posix depending on what system we're on. This exports: - al ...

  6. 解决linux系统CentOS下调整home和根分区大小

    目标:将VolGroup-lv_home缩小到20G,并将剩余的空间添加给VolGroup-lv_root   1.首先查看磁盘使用情况 [root@localhost ~]# df -h 文件系统 ...

  7. 实现数组(java)

    一,数组 java中有对数组的数据结构:数组就是一个存放固定数据的结构. 数组的声明举例:int [] array=new int [3],与之相同的是private  in [ ] array; a ...

  8. Arria10 SDI II学习笔记

    12G-SDI16是什么意思? 关于 int_vpid_byte1 int_vpid_byte2 int_vpid_byte3 int_vpid_byte4 这些参数是不是如果外部数据有就不需要传输, ...

  9. SQL优化实战之加索引

    有朋友和我说他的虚机里面的mysql无法跑sql,但是在本地环境是这个sql是可以跑出来的.碰到这个问题第一反应是:死锁. 于是让他查询数据库的几个状态: 发现连即时锁都非常少,不是锁的问题. 进一步 ...

  10. Jersey RESTful WebService框架学习(五)使用@BeanParam

    第一步:定义一个实体类 注意:实体类的属性需要加上FormParam注解 public class User { @FormParam("name") private String ...