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之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...
随机推荐
- js 判断数组
这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...
- TArray数组
TArray<int32> arr; arr.Init(,); ; index < arr.Num(); index++) { FString str = FString(" ...
- asp 之 让实体中字段类型为DateTime的字段仅仅显示日期不显示时间
在我们平时的工作开发中.我们一般会遇到这种一个问题:某个实体的某个字段是DateTime类型的,但是我们在界面上仅仅想让它显示日期不显示时间! 一个订单实体: //订单类 public ...
- Django项目实战 - 搜索功能(转)
首先,前端已实现搜索功能页面, 我们直接写后台逻辑: Q()可以实现 逻辑或的判断, name_ _ icontains 表示 name字段包含搜索的内容,i表示忽略大小写. from djang ...
- JPA的坑多服务主键重复
配置如下 @Id @GeneratedValue(generator="generator") @GenericGenerator(name="generator&quo ...
- vue学习之旅:入门
首先利用脚手架vue cli搭建vue环境 引入 vue <script src="https://unpkg.com/vue/dist/vue.js"></sc ...
- 简单工厂模式设计(java反射机制改进)
如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...
- FineReport----日期处理
日期处理:http://help.finereport.com/doc-view-819.html DAYSOFMONTH(date):返回当日的该月天数 DATEDELTA(Today(),-1): ...
- 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理
一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...
- 巨蟒python全栈开发数据库攻略1:基础攻略
1.什么是数据库? 2.数据库分类 3.数据库简单介绍 4.安装数据库 5.修改root密码 6.修改字符集 7.sql介绍 8.简单sql操作