Mybatis之基础应用小结以及IntelliJ IDEA目录结构的一些小问题
【Mybatis 之基础应用小结】
1、不管怎么样,先建立一个简单的MySQL数据表,如下所示

2、接下来要做的事情就是通过Mybatis对数据表进行基础的增删查改,写好bean以及打算实现的方法
import java.util.List;
public class PersonDAO {
public void savePerson(Person person) {
}
public void removePersonByName(String name) {
}
public void removePersonByAge(int age) {
}
public List<Person> listPersonByName() {
return null;
}
public List<Person> listPersonByAge() {
return null;
}
public void updatePersonByName() {
}
}
3、在写代码之前,先添加必要的依赖包,
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
4、要实现上述罗列的方法的第一步就是获取数据表所在数据库的连接,
把配置文件COPY进来,编辑好连接所需要的信息,(mappers先注释掉,顺手把log4j的配置文件也丢进来
在这之前先把项目分好层次,

Configuration.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> <environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/my_test"/>
<property name="username" value="root"/>
<property name="password" value="19971019"/>
</dataSource>
</environment>
</environments> <!--<mappers>-->
<!--<mapper resource="????"/>-->
<!--</mappers>--> </configuration>
log4j.properties
log4j.rootLogger=DEBUG, MyConsole
log4j.appender.MyConsole=org.apache.log4j.ConsoleAppender
log4j.appender.MyConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.MyConsole.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
5、我们的最终目的是得到SqlSession类对象,以便通过该对象执行SQL语句,在此之前需要建立SqlSessionFactory,
我将这段代码独立地放在db层下,如下所示:
package db; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /**
* 访问数据库类
*/
public class DBAccess {
public SqlSession getSqlSession() throws IOException {
Reader reader = Resources.getResourceAsReader("Configuration.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
这样就可以方便地获得SqlSession类对象了。
6、真正开始实现personDAO,先把模板COPY到类底下
private static DBAccess dbAccess = null;
private static SqlSession sqlSession = null; static {
dbAccess = new DBAccess();
try {
sqlSession = dbAccess.getSqlSession();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
protected void finalize() throws Throwable {
sqlSession.close();
super.finalize();
}
( 有错。线程不安全)
创建 person.xml 并把模板COPY进来略做修改
<?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="Person"> <resultMap type="bean.Person" id="PersonResult">
<result column="NAME" jdbcType="VARCHAR" property="name"/>
<result column="AGE" jdbcType="INTEGER" property="age"/>
</resultMap> </mapper>
修改Configuration.xml 中的 mapper
<mappers>
<mapper resource="sqlxml/Person.xml"/>
</mappers>
接下来的节奏就是 person.xml --> PersonDAO.java --> 测试 --> person.xml --> PersonDAO.java --> 测试 --> person.xml --> PersonDAO.java --> 测试 --> person.xml --> PersonDAO.java --> 测试 --> person.xml --> PersonDAO.java --> 测试 --> person.xml --> PersonDAO.java --> 测试 --> .... 一个一个方法写下来。在SQL语句中如何获取特定类型的参数值 可以参考 通过自动回复机器人学Mybatis:OGNL+log4j.properties 里面的图片。
7、完成之后是这个样子的,
person.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="Person"> <resultMap type="bean.Person" id="PersonResult">
<result column="NAME" jdbcType="VARCHAR" property="name"/>
<result column="AGE" jdbcType="INTEGER" property="age"/>
</resultMap> <insert id="savePerson" parameterType="bean.Person">
INSERT INTO person VALUES (#{name}, #{age})
</insert> <delete id="removePersonByName" parameterType="String">
DELETE FROM person WHERE name='${_parameter}'
</delete> <delete id="removePersonByAge" parameterType="int">
DELETE FROM person WHERE name=${_parameter}
</delete> <select id="listPersonByName" parameterType="String" resultMap="PersonResult">
SELECT name, age FROM person WHERE name='${_parameter}'
</select> <select id="listPersonByAge" parameterType="int" resultMap="PersonResult">
SELECT name, age FROM person WHERE age=${_parameter}
</select> <update id="updatePersonByName" parameterType="bean.Person">
UPDATE person SET age=${age} WHERE name='${name}'
</update> </mapper>
personDAO.java
package dao; import bean.Person;
import db.DBAccess;
import org.apache.ibatis.session.SqlSession; import java.io.IOException;
import java.util.List; public class PersonDAO {
private static DBAccess dbAccess = null;
private static SqlSession sqlSession = null; static {
dbAccess = new DBAccess();
try {
sqlSession = dbAccess.getSqlSession();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
protected void finalize() throws Throwable {
sqlSession.close();
super.finalize();
} public static void main(String[] args) {
Person person = new Person();
person.setName("小王");
person.setAge(23); PersonDAO personDAO = new PersonDAO();
personDAO.savePerson(person);
// personDAO.removePersonByName("小王");
// personDAO.removePersonByAge(23);
System.out.println(personDAO.listPersonByName("小王"));
for (Person p : personDAO.listPersonByAge(19)) {
System.out.println(p);
}
personDAO.updatePersonByName("小王", 0);
} public void savePerson(Person person) {
sqlSession.insert("Person.savePerson", person);
sqlSession.commit();
} public void removePersonByName(String name) {
sqlSession.delete("Person.removePersonByName", name);
sqlSession.commit();
} public void removePersonByAge(int age) {
sqlSession.delete("Person.removePersonByAge", age);
sqlSession.commit();
} public List<Person> listPersonByName(String name) {
return sqlSession.selectList("Person.listPersonByName", name);
} public List<Person> listPersonByAge(int age) {
return sqlSession.selectList("Person.listPersonByAge", age);
} public void updatePersonByName(String name, int age) { Person person = new Person();
person.setName(name);
person.setAge(age); sqlSession.update("Person.updatePersonByName", person);
sqlSession.commit();
}
}
这样写貌似会造成线程不安全,单个用户多次刷新的时候
【IntelliJ IDEA目录结构的一些小问题】
IntelliJ IDEA 的目录结构和 eclipse 的目录结构有那么一点不同,

如果在 IntelliJ IDEA 中采取 eclipse 中的方式来读取Mybatis配置文件是要出错的!(反之亦然
eclipse 的根目录是 src

而 IntelliJ IDEA 则把各类文件分了类,管你怎么弄,类别不对就是读不到。。。
我们需要自定义各种类型文件的根目录

为了顺利读到配置文件,个人采取的方式是把 config 文件直接分离出来并设置为 Sources Root

然后通过 Copy Relative Path 来得到所需配置文件的路径

在本例中结果是这样的,相对路径非常简洁


Mybatis之基础应用小结以及IntelliJ IDEA目录结构的一些小问题的更多相关文章
- cocos基础教程(3)cocos3.x版本目录结构介绍
简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...
- Linux基础系列—Linux内核源码目录结构
/** ****************************************************************************** * @author 暴走的小 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- VB6 GDI+ 入门教程[5] 基础绘图小结
http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[5] 基础绘图小结 2009 年 6 月 18 日 4条 ...
- Spring+SpringMVC+Mybatis环境的搭建(使用Intellij IDEA)
前言:本文主要介绍利用IDEA如何搭建SSM环境,并使用mybatis的逆向生成功能,根据数据表生成对应mapper接口和sql映射文件.具体步骤如下. 开发环境: IDEA 14.1.7 maven ...
- Spring+SpringMVC+MyBatis整合基础篇(三)搭建步骤
作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 框架介绍 Spring SpringMVC MyBatis easyUI ...
- 【入门详解】MyBatis入门基础详解
什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...
- javascript之正则表达式基础知识小结
javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...
随机推荐
- HTML5 选择前置摄像头,选择后置摄像头
最近发现我写的都是乱七八糟的,觉得应该给大家带点福利,于是写了这篇 背景:最近想做个web应用,需要用到摄像头,但是发现默认一直是前置摄像头,拍照很麻烦,于是找了很多文章,居然没有人提到,只好FQ去找 ...
- EasyUI简单CRUD
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- plsql类型
--plsql基本数据类型1.标量类型1.1数字型--BINARY_INTEGER 来存储有符号整数.它的范围是-2**31至2**31.跟PLS_INTEGER一样,BINARY_INTEGER所需 ...
- CNN 各layer汇总
Flattening:类型为:Flatten 基于某个axis进行偏平的意思,如 axis = 1 ,fattens an input of shape n * c * h * w to a simp ...
- python中函数参数*args和**kw的区别
1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果 ...
- win7物理主机与虚拟XP系统互相ping不通解决方法
安装了虚拟XP系统,win7物理主机与XP系统ping不通,原因在于安装虚拟XP系统网络连接方式选的仅主机网络,则win7物理主机上的网卡应为VMnet1,而自己的win7VMnet1网卡处于禁用状态 ...
- Windows 10 上安装 3D Studio Max 2016 报错的解决办法
在 Windows 10 上安装 3D Stuido Max 2016 报错,无法正常安装,查看日志是 VC 运行时安装错误,经过分析发现在 Windows 10 上已经有这些运行时并且版本比安装包中 ...
- centos 6.5 安装图形界面【转】
最近想在centos 6.5上安装图形界面,在网上找到了方法.[原文链接] CentOS6相对于CentOS5的安装有了不少的进步,有不少默认的选项可以选择,如: Desktop :基本的桌面系统,包 ...
- Share and NTFS Permission
NTFS Permissions Share Permissions Share and NTFS Permission Similarities 共享权限和NTFS权限的相似性 Modifying ...
- Oracle数据库模型(OLAP/OLTP)
数据库模型 选择数据库模型: 联机事务处理OLTP(on-line transaction processing) OLTP是传统的关系数据库的主要应用,基本的.日常的事务处理.例如银行交易. OLT ...