工具: mysql 5.5.62   IDEA

参考自:https://www.cnblogs.com/best/p/5688040.html

遇到的问题: 无法读取src/main/java下配置文件, 解决方法参考自https://blog.csdn.net/qq_32778043/article/details/80746668

项目目录如下:

1   创建maven项目,添加jar包

首先不使用模板创建一个maven项目,groupid填com.admin,  artifactid为MybatisTest,添加jar包,修改pom.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.admin</groupId>
<artifactId>MybatisTest</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- mybatis ORM框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!-- JUnit单元测试工具 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency> </dependencies> <!--解决IDEA无法读取src/main/java/配置文件问题-->
<build>
<finalName>MybatisTest</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build> </project>

2   添加mybatis配置文件

在src/main/java包下添加mybatis配置文件MyBatisCfg.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>
<!--引入类路径下的资源-->
<properties resource="db.properties"></properties>
<typeAliases>
<package name="com.admin.entities" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.uid}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/admin/mapper/GoodsMapper.xml" />
</mappers>
</configuration>

在src/main/java目录下添加数据库配置文件db.properties文件(对应MyBatisCfg.xml中db.peroperties),mysql-connector-java-8.0.12对应driver及url与前面的版本有些差异

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8
mysql.uid=root
mysql.password=123456

3   创建DAO接口GoodsDAO及对应的GoodsMapper.xml

在src/main/java下新建com.admin包,其下再新建entities包及mapper包

在com.admin.entities(与MyBatisCfg.xml中package name对应)中创建Goods类Goods.java

 package com.admin.entities;

 import java.io.Serializable;

 public class Goods implements Serializable {

     private static final long serialVersionUID = 1L;

     private int id;

     private String name;

     private double price;

     private String picture;

     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 getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public String getPicture() {
return picture;
} public void setPicture(String picture) {
this.picture = picture;
} @Override
public String toString() {
return "Goods{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", picture='" + picture + '\'' +
'}';
}
}

在com.admin.mapper包下创建GoodsDAO接口及GoodsMapper.xml

GoodsDAO.java

 package com.admin.mapper;

 import com.admin.entities.Goods;
import org.apache.ibatis.annotations.Param; import java.util.List; public interface GoodsDAO { public List<Goods> getGoodsPager(@Param("skip")int skip, @Param("size") int size); public Goods getGoodsById(int id); public int getGoodsCount(); public int insert(Goods entity); public int delete(int id); public int update(Goods entity);
}

GoodsMapper.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.admin.mapper.GoodsDAO">
<!--获得商品信息并分页 -->
<select id="getGoodsPager" resultType="Goods">
select
id,name,price,picture from goods limit #{skip},#{size}
</select>
<!-- 获得单个商品通过编号 -->
<select id="getGoodsById" parameterType="int" resultType="Goods">
select
id,name,price,picture from goods where id=#{id}
</select>
<!--获得商品总数 -->
<select id="getGoodsCount" resultType="int">
select count(*) from goods
</select>
<!--新增加商品 -->
<insert id="insert" parameterType="Goods">
insert into
goods(name,price,picture) values(#{name},#{price},#{picture});
</insert>
<!-- 删除商品 -->
<delete id="delete">
delete from goods where id=#{id}
</delete>
<!-- 修改商品 -->
<update id="update" parameterType="Goods">
update goods set
name=#{name},price=#{price},picture=#{picture} where id=#{id}
</update>
</mapper>

4  创建junit测试类

在src/test/java创建包test,创建两个类MyBatisUtil.java和TestGoods.java

MyBatisUtil.java

 package test;

 import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public abstract class MyBatisUtil { public static SqlSessionFactory getSqlSessionFactory(){
// 获得环境配置文件流
InputStream config = MyBatisUtil.class.getClassLoader().getResourceAsStream("MyBatisCfg.xml");
// 创建sql会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
return factory;
} //获得会话
public static SqlSession getSession(){
return getSqlSessionFactory().openSession(true);
} /**
* 获得得sql会话
* @param isAutoCommit 是否自动提交,如果为false则需要sqlSession.commit();rollback();
* @return sql会话
*/
public static SqlSession getSession(boolean isAutoCommit){
return getSqlSessionFactory().openSession(isAutoCommit);
} }

TestGoods.java

 package test;

 import com.admin.entities.Goods;
import com.admin.mapper.GoodsDAO;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test; import java.util.List; public class TestGoods { @Test
public void getGoodsPagerTest() {
int skip = 4;
int size = 2;
SqlSession session = MyBatisUtil.getSession();
try {
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
List<Goods> goods = bookdao.getGoodsPager(skip, size);
Assert.assertEquals(2, goods.size());
} finally {
session.close();
}
} @Test
public void getGoodsByIdTest() {
SqlSession session = MyBatisUtil.getSession();
try {
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
Goods goods = bookdao.getGoodsById(1);
Assert.assertEquals(1, goods.getId());
} finally {
session.close();
}
} @Test
public void getGoodsCountTest() {
SqlSession session = MyBatisUtil.getSession();
try {
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
Assert.assertEquals(9, bookdao.getGoodsCount());
} finally {
session.close();
}
} @Test
public void insertTest() {
SqlSession session = MyBatisUtil.getSession();
try {
Goods entity = new Goods();
entity.setName("正宗无锡阳山水蜜桃新鲜水果水密桃12个6斤装江浙沪皖顺丰包邮");
entity.setPrice(108);
entity.setPicture("nopic.jpg");
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
Assert.assertEquals(1, bookdao.insert(entity));
} finally {
session.close();
}
} @Test
public void deleteTest() {
SqlSession session = MyBatisUtil.getSession();
try {
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
Assert.assertEquals(1, bookdao.delete(12));
} finally {
session.close();
}
} @Test
public void update() {
SqlSession session = MyBatisUtil.getSession();
try {
GoodsDAO bookdao = session.getMapper(GoodsDAO.class);
Goods entity = bookdao.getGoodsById(12);
entity.setName("正宗无锡阳山水蜜桃新鲜水果水密桃12个6斤装");
entity.setPrice(107);
entity.setPicture("nopicture.jpg"); Assert.assertEquals(1, bookdao.update(entity));
} finally {
session.close();
}
}
}

5  导入SQL并测试

使用navicat等工具, 创建数据库db1,导入sql数据,

/*
Navicat MySQL Data Transfer Source Server : localhost
Source Server Version : 50536
Source Host : localhost:3306
Source Database : db1 Target Server Type : MYSQL
Target Server Version : 50536
File Encoding : 65001 Date: 2016-07-20 10:13:58
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for `goods`
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`price` decimal(10,2) DEFAULT '0.00',
`picture` varchar(100) DEFAULT 'default.jpg',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of goods
-- ----------------------------
INSERT INTO `goods` VALUES ('1', 'G7 中原G7三合一浓醇咖啡固体饮料1200', '66.50', '1.jpg');
INSERT INTO `goods` VALUES ('2', '百草味东北松子200gx2袋 坚果炒货零', '42.90', '2.jpg');
INSERT INTO `goods` VALUES ('3', '奈津香 桂圆干500gx2袋莆田特产5A桂', '39.90', '3.jpg');
INSERT INTO `goods` VALUES ('4', '益达尊享护齿装草本40粒+冰柠40粒+西', '25.90', '4.jpg');
INSERT INTO `goods` VALUES ('5', '猴坑茶业2016新茶原产地手工太平猴魁特', '168.00', '5.jpg');
INSERT INTO `goods` VALUES ('6', '嘻鱿记 休闲零食 麻辣香辣奶香炭烧 5种', '39.80', '6.jpg');
INSERT INTO `goods` VALUES ('7', '荣业鸿福五分瘦腊肠 香港土特产香肠腊味', '126.80', '7.jpg');
INSERT INTO `goods` VALUES ('8', '蓓琳娜(BELLINA)3L PDO特级初榨橄榄油', '178.00', '8.jpg');
INSERT INTO `goods` VALUES ('10', '荣业鸿福五分瘦腊肠 香港土特产香肠腊味', '30.60', 'b454b44f-868e-4efe-ae17-91e9e6a58390.jpg');

点击TestGoods类中被@Test注解的各方法前的箭头,执行测试

最新文章

  1. ms-sql关联表操作
  2. WIN2003使用IP安全策略只允许指定IP远程桌面连接
  3. Java Class文件详解
  4. Fastcgi介绍和php中fastcgi的应用
  5. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.2.更换主题
  6. XStream使用详解
  7. CCF 201403-3 命令行选项 (STL模拟)
  8. How to create jar for Android Library Project
  9. Spark Streaming 原理剖析
  10. std::string stringf(const char* format, ...)
  11. 分页插件jquery.simplePagination.js使用
  12. 定时每天备份mysql
  13. C#二进制字节数组操作功能 拦截字节数组SubByte
  14. Android适配方案小结(一)
  15. makefile的编写规则
  16. mysql5.6升级到5.7后Sequel Pro无法连接解决
  17. 《java入门第一季》之UDP协议下的网络编程详解
  18. 『集群』005 Slithice 基于 集群 的 自动容错
  19. js实现进度条
  20. 从navicat中导入sql文件过大:Got a packet bigger than &#39;max_allowed_packet&#39; bytes

热门文章

  1. 05Dockerfile简介
  2. Codesign error: Certificate identity appearing twice
  3. saltStack_安装和使用
  4. OpenStack组件系列☞glance简介
  5. win10 uwp httpClient 登陆CSDN
  6. oracle WHERE子句中的连接顺序
  7. SuperSocket特点
  8. oracle优化EXPORT和IMPORT
  9. 【BestCoder Round #93 1004】MG loves set
  10. iOS设备 微信h5页面回退 内容不刷新的问题