第三章.搭建MyBatis工程环境
1.数据库的准备:
数据库:
create DATABASE mybatis;
数据表:
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(120) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`)
)
INSERT into user(id,username,password,gender,birthday)
VALUES
(1,'程花花','','男','1998-12-23'),
(2,'李四','','男',,'1997-03-07'),
(3,'丽丽','','女','1996-01-05'),
(4,'花花','','女','1998-10-24');
到此数据库的准备工作已经完成,接下来是搭建工程环境。
2.搭建工程环境(MyEclipse):
在MyEclipse开发工具中创建新的一个web工程,命名为MyBatisFirstDemo
创建工程
工程目录:
在lib文件夹下面,添加我们所需要的jar包:
选中右键Build Path ->Add to Build Path
所有的jar包已打包上传:
链接:https://pan.baidu.com/s/1HSxt2WX03Mq4h9eYwPkpHg
提取码:1w2h
其他工程目录的详解:
log4j.properties
#Global logging configuration
# 在开发环境下日志级别要设成
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
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>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development"> <transactionManager type="JDBC" />
<!-- 数据连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?characterEnciding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment> </environments> <!-- 配置UserMapper.xml的映射地址 -->
<mappers>
<mapper resource="sqlmap/UserMapper.xml"/>
</mappers>
</configuration>
DataConnection .java
public class DataConnection { //MyBatis配置文件
private String resource = "SqlMapConfig.xml";
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession; public SqlSession getSqlSession() throws IOException{
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
User.java
构造器(两个),setter&getter方法
public class User implements Serializable{ private int id;
private String username;
private String password;
private String gender;
private Date birthday;
...
}
UserMapper.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="test">
<!-- id查询 -->
<select id="findUserByid" parameterType="int" resultType="cn.com.mybatis.po.User" >
select * from user where id=#{id}
</select> <!-- 模糊查询 -->
<select id="findUserByUsername" parameterType="java.lang.String" resultType="cn.com.mybatis.po.User">
select * from user where username like '%${value}%'
</select> <!-- 添加数据 -->
<insert id="insertUser">
insert into user(username,password,gender,birthday)
value(#{username},#{password},#{gender},#{birthday})
</insert> <!-- drop -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete> <!-- update -->
<update id="update" parameterType="cn.com.mybatis.po.User">
update user set username=#{username} where id=#{id}
</update>
</mapper>
MyBatisTest.java
public class MyBatisTest {
public DataConnection dataConn = new DataConnection();
//根据id进行查询
@Test
public void TestSelect() throws IOException{
SqlSession sqlSession = dataConn.getSqlSession();
User user = sqlSession.selectOne("test.findUserByid",);
System.out.println("username:" + user.getUsername());
System.out.println("password:" + user.getPassword());
System.out.println("gender:" + user.getGender()); System.out.println("birthday:" + user.getBirthday());
sqlSession.close();
} //模糊查询
@Test
public void TestFuzzySearch() throws IOException{
SqlSession sqlSession = dataConn.getSqlSession();
List<User> userList = sqlSession.selectList("test.findUserByUsername","花");
for (int i = ; i < userList.size(); i++) {
User user = userList.get(i);
System.out.println("name:" + user.getUsername());
System.out.println("password:" + user.getPassword());
System.out.println("gender:" + user.getGender());
System.out.println("birthday:" + user.getBirthday());
} sqlSession.close();
} //insert
@Test
public void TestInsert() throws IOException, ParseException{
SqlSession sqlSessions = dataConn.getSqlSession();
User user = new User();
user.setUsername("嘉佳");
user.setPassword("");
user.setGender("女"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(sdf.parse("1992-03-15")); sqlSessions.insert("test.insertUser",user);
sqlSessions.commit();
sqlSessions.close();
}
//delete
@Test
public void TestDrop() throws IOException{
SqlSession sqlSession = dataConn.getSqlSession();
sqlSession.delete("test.deleteUser",6);
sqlSession.commit();
sqlSession.close();
}
//update
@Test
public void Testupdate() throws IOException{
SqlSession sqlSession = dataConn.getSqlSession();
User user = new User();
user.setId(1);
user.setUsername("张花花");
sqlSession.update("test.update", user);
sqlSession.commit();
sqlSession.close();
}
}
注意:
测试类的创建:是下图的JUnit,在测试的时候,每个测试类上面都需要写@Test,需要调用的方法不需要加@Test
方便开发中的测试,可以不写main方法
对每个方法进行测试时可以进行单个测试,否则可能所有的测试都执行。
首先双击选中测试的类,右击选择Run As 可以看到一个Junit Test点击即可进行测试
1.根据id进行查询,此时查询到的单个记录
控制台代码(部分)
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection .
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@480bdb19]
DEBUG [main] - ==> Preparing: select * from user where id=?
DEBUG [main] - ==> Parameters: (Integer)
DEBUG [main] - <== Total:
username:花花
password:128722
gender:女
birthday:Sat Oct 24 00:00:00 CST 1998
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@480bdb19]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@480bdb19]
DEBUG [main] - Returned connection to pool.
2.模糊查询,此时查询道德可能是多个记录
控制台代码(部分)
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection .
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@13c27452]
DEBUG [main] - ==> Preparing: select * from user where username like '%花%'
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total:
name:程花花
password:12345
gender:男
birthday:Wed Dec 23 00:00:00 CST 1998
name:花花
password:128722
gender:女
birthday:Sat Oct 24 00:00:00 CST 1998
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@13c27452]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@13c27452]
3.insert 插入数据
控制台代码(部分)
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection .
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@]
DEBUG [main] - ==> Preparing: insert into user(username,password,gender,birthday) value(?,?,?,?)
DEBUG [main] - ==> Parameters: 嘉佳(String), 55555(String), 女(String), 1992-03-15 00:00:00.0(Timestamp)
DEBUG [main] - <== Updates:
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@]
数据库中:
4.delete可见在3操作中成功添加数据id=6的嘉佳
此时来测试删除该记录
控制台代码(部分)
DEBUG [main] - Created connection .
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - ==> Preparing: delete from user where id=?
DEBUG [main] - ==> Parameters: 6(Integer)
DEBUG [main] - <== Updates:
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
刷新数据库:
此时在3操作添加的记录成功删除!
5.update更新操作
id为的username为程花花貌似很难听
修改一下为张花花
控制台代码(部分)
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection .
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - ==> Preparing: update user set username=? where id=?
DEBUG [main] - ==> Parameters: 张花花(String), 1(Integer)
DEBUG [main] - <== Updates:
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@bd8db5a]
刷新数据库:
至此,当您看到这里,并且会单独操作,作为初学者,您已经成功入门了!
第三章.搭建MyBatis工程环境的更多相关文章
- 搭建MyBatis开发环境及基本的CURD
目录 一.MyBatis概述 1. MyBatis 解决的主要问题 二.快速开始一个 MyBatis 1. 创建mysql数据库和表 2. 创建maven工程 3. 在pom.xml文件中添加信息 4 ...
- 第一章 搭建Qt开发环境
第一章 搭建Qt开发环境 1.到http://download.qt-project.org/archive/上下载Qt的源码包.我下载的是qt-everywhere-opensource-src-4 ...
- 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...
本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...
- <Mastering KVM Virtualization>:第三章 搭建独立的KVM虚拟化
在第二章,你了解了KVM的内部结构:在本章中,您将了解如何将Linux服务器设置为虚拟化主机.我们正在讨论将KVM用于虚拟化并将libvirt作为虚拟化管理引擎. KVM开启了虚拟化并利用你的服务器或 ...
- 第二章 搭建Android开发环境
这一章为我们讲解了如何搭建Android开发环境. 首先要了解的是Android底层开发需要哪些工具:搭建android应用程序开发环境.android NDK开发环境和交叉编译环境,前两个用来测试L ...
- 第二章 搭建Android开发环境--读书笔记
俗话说,工欲善其事,必先利其器,对于Android驱动开发来说,首先我们要做的就是搭建Android开发环境,我们首先要配置Linux驱动的开发环境,接着还得配置开发Android应用程序以及Andr ...
- 搭建mybatis开发环境
1.创建工程 <groupId>com.hope</groupId> <artifactId>day01_eesy_01mybatis</artifa ...
- JSP Web第三章整理复习 开发环境搭建
P86 WEB工作原理 用户使用浏览器通过HTTP协议请求服务器上的Web资源,服务器接收到该请求后,读取请求的URI所标识的资源,加上其他资源发送给客户端的浏览器,浏览器解析响应中的HTML数据, ...
随机推荐
- .net core 第一篇选择开发工具和环境
.net core 已经发布三年了,社区也逐步成熟.作为微软阵营的一员,忙了一年年底抽点时间系统学习下.学习资料主要为以下为主: 1. https://docs.microsoft.com/zh-cn ...
- linux免密登录ssh验证配置方法及常见错误解决
目标:从服务器A免密登录服务器B [配置方法] 1.在服务器A生成密钥文件,直接使用以下命令: ssh-keygen 中间遇到输入内容一路回车即可,完成后会在 ~/.ssh 目录下生成两个文件:id_ ...
- [Erlang]各种系统限制总结
Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制. 1.进程数量 缺省情况下同时存在的最大Erlang进程数量不超过2^18=26214 ...
- java温故而知新(9)OOP(面向对象编程)理念
Object Oriented Programming (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在 Object-Orie ...
- AndroidVideoCache 框架源码分析
1.简析: 在客户端播放视频的使用,容易出现这样的一个问题.在网络状况不好的情况下,视频流很容易卡顿或者中断,即使播放软件本身有一点的缓存能力,但是这个往往不够,造成播放失败,卡顿. AndroidV ...
- 第6章 征服CSS3选择器(上)
属性选择器 在HTML中,通过各种各样的属性可以给元素增加很多附加的信息.例如,通过id属性可以将不同div元素进行区分. 在CSS2中引入了一些属性选择器,而CSS3在CSS2的基础上对属性选择器进 ...
- python 2.7支持中文
在代码的第一行加上#coding=utf-8 return render_template('index.html',message=u"小明小明")print u'你要打印的字符 ...
- VS code 自定义快捷输入
本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 位置 ctrl+shift+p 搜索: snippets 输入类型: 比如 ...
- 关于moucedown 的3种触发方式
与 click 事件不同 mousedown 按下鼠标就可以触发 click 只能用鼠标左键触发, 而mousedown 可以由单击.中键.或右击 触发 根据对event.which 的判断,可以 ...
- 日常捕获的野生知识 - javascript 与 类
javascript 并不提供类这样方便实用的面向对象类型,今天学习到了,直接上代码: <!DOCTYPE html> <html lang="en"> & ...