工具及软件
编辑器:intellij IDEA
项目基础:使用maven构建demo项目(maven构建项目,可以节省导jar包的繁琐,由于采用依赖注入的方式,基本不会出现漏jar包导致项目出错的情况)
项目结构(备注:使用log4j作为日志输出管理)
pom.xml
junit
junit
4.12
test
org.mybatis
mybatis
3.4.6
log4j
log4j
1.2.17
Mybatis的核心配置文件sqlMapConfig.xml
jdbc配置文件jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.initialSize=0
jdbc.maxActive=20
jdbc.maxIdle=20
jdbc.minIdle=1
jdbc.maxWait=60000
log4j日志文件配置属性
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=../logs/service.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.logger.com.ibatis = debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
#log4j.logger.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug
数据库
CREATE TABLE `mybatis` (
`Id` varchar(255) NOT NULL DEFAULT '',
`userId` varchar(255) NOT NULL DEFAULT '',
`userName` varchar(255) NOT NULL DEFAULT '',
`sex` varchar(8) NOT NULL DEFAULT '',
`age` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mybatis` VALUES ('123456','user123456','测试3','男',11),('3d993a1d-b6de-403a-b104-bf4d86643ac1','ad123456','测试','男',11),('bc80e443-ca53-4ef1-adbd-312e282f2d06','ad123456','测试2','男',11);
基本准备工作完成下面进行测试文件编写
Entity
package cn.vision.entity;
public class User {
String id;
String userId;
String userName;
String sex;
int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
mapper---------简单mybatis动态sql语句查询操作
test------------使用junit单元测试进行
package cn.vision.test;
import cn.vision.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class testMybatis {
SqlSession sqlSession;
@Before
public void init()throws IOException{
String resource = "sqlMapConfig.xml"; //定位核心配置文件
//官方示例获取resource,需抛出异常
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过类属性获得resource,无需抛出异常
//InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
sqlSession = sqlSessionFactory.openSession(); //获取到 SqlSession
}
@Test
public void ceshi() throws IOException{
/**
* 1、获得 SqlSessionFactory
* 2、获得 SqlSession
* 3、调用在 mapper 文件中配置的 SQL 语句
*/
String resource = "sqlMapConfig.xml"; // 定位核心配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取到 SqlSession
// 调用 mapper 中的方法:命名空间 + id
User user = new User();
user.setUserId("user123456");
List personList = sqlSession.selectList("cn.vision/mapper.UserMapper.findAll");
// List personList = sqlSession.selectList("cn.vision/mapper.UserMapper.findAll",user);
for (User p : personList){
System.out.println("name: "+p.getUserName());
}
}
}
成功查询到数据则为
两个问题
1、为什么使用junit单元测试?
使用单元测试可以更好、更简洁的测试每一个模块/方法的执行结果。如果不使用junit的话,很可能你为了某一个模块的测试结果而运行整个项目,从时间和效率角度来讲,熟练使用一个便捷的测试工具会给开发带来质的变化
2、mybatis和hibernate区别是什么?
嗯、简单来说hibernate更封闭和笨重、安全性更高适合大企业开发项目
mybatis更开放、量级更轻,适用于快速开发项目
hibernate的sql语句都能通过hql统一解决不同数据库的兼容性问题,sql语句完全封装,一般情况下不能定制更高效率的sql语句
mybatis需要根据不同的数据库编写不同的sql语句,但mybatis可以为不同的需求编写更高效率的sql语句
此章只涉及到mybatis的基础配置,并未实际应用与web项目,所以并未配置web.xml
内容仅为作者的个人学习路上的笔记,和个人见解,概括不全或有误之处,可留言或私信修改
---------------------------------2018/05/05-----------------------------------------