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目录结构的一些小问题的更多相关文章

  1. cocos基础教程(3)cocos3.x版本目录结构介绍

    简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...

  2. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  3. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  4. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  5. VB6 GDI+ 入门教程[5] 基础绘图小结

    http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[5] 基础绘图小结 2009 年 6 月 18 日 4条 ...

  6. Spring+SpringMVC+Mybatis环境的搭建(使用Intellij IDEA)

    前言:本文主要介绍利用IDEA如何搭建SSM环境,并使用mybatis的逆向生成功能,根据数据表生成对应mapper接口和sql映射文件.具体步骤如下. 开发环境: IDEA 14.1.7 maven ...

  7. Spring+SpringMVC+MyBatis整合基础篇(三)搭建步骤

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 框架介绍 Spring SpringMVC MyBatis easyUI ...

  8. 【入门详解】MyBatis入门基础详解

    什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...

  9. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

随机推荐

  1. C++ Base64编码解码、MD5及TEA加密解密

    Crypto.h以及Crypto.cpp Crypto.h  123456789101112131415161718192021222324252627282930313233343536373839 ...

  2. java必备——经典的Hibernate

    在编程开发中,我们有非常多框架,他们有些非常方便,也非常有用,今天我们一起来认识一个java经典的框架Hibernate,Hibernate英文名称为"冬眠".这是个非常有意思的技 ...

  3. NHibernate 1.0 Released 版本发布了

    NHibernate is a port of Hibernate to the .NET platform. Hibernate is the leading open-source object- ...

  4. java中的字符集和编码

    前言 上次对计算机中的“字符集”和“编码”分别进行了总结,并指出二者之间的区别,不要搞混了,不清楚的再回到上一章看一下.今天再总结下java中是如何使用字符集(主要是Unicode字符集,其他常用字符 ...

  5. JZOJ.5235【NOIP2017模拟8.7】好的排列

    Description 对于一个1->n的排列 ,定义A中的一个位置i是好的,当且仅当Ai-1>Ai 或者Ai+1>Ai.对于一个排列A,假如有不少于k个位置是好的,那么称A是一个好 ...

  6. centos7的nfs配置

    author : headsen chen date : 2018-04-12  09:40:14  一,服务端安装和配置: 环境准备: systemctl stop firewalld system ...

  7. HDU 5677 ztr loves substring(回文串加多重背包)

    ztr loves substring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. Oracle安装错误:File not found WFMLRSVCApp.ear

    oracle 11g安装过程中问题:找不到WFMLRSVCApp.ear 在 oracle 11gR2 64bit 安装到window 7 64位操作系统中,安装到53%时,提示找不到WFMLRSVC ...

  9. 使用CocoaPods配置管理开源项目

    今天从GitHub下载了MMProcessHUB,想先看看demo,但是不巧的是作者是用CocoaPods配置的,需要安装CocoaPods,CocoaPods是一个第三方的类库管理工具.找了一篇很详 ...

  10. 如何在 window 上面输入特殊字符?

    打开 字符映射表 程序 选中任意一个字符,它会在下方显示该字符的 16进制 转换16进制至10进制,并在输入法打开的状态下,按住 Alt 键输入 10 进制数值即可.