赤裸裸的Mybatis之基础应用小结以及IntelliJ IDEA目录结构的一些小问题

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 来得到所需配置文件的路径

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

时间: 2024-08-05 15:14:47

赤裸裸的Mybatis之基础应用小结以及IntelliJ IDEA目录结构的一些小问题的相关文章

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

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

MyBatis入门基础(一)

一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记录于此,方便大家参考,也方便自己查阅. 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么问题. package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

awk基础知识小结(2)

10.循环结构循环结构awk 的 while 循环结构,它等同于相应的 C 语言 while 循环.awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值.它类似于其它语言中的 "repeat...until" 循环.示例:do...while 示例 {     count=1     do {    print "I get printed at least once no matter w

Javascript基础篇小结

Javascript基础篇小结 字数9973 阅读3975 评论7 喜欢28 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript操作DOM的本质是=获取+触发+改变 目的:就是用来操作内存中的DOM节点 修改D

JAVA基础—泛型小结

概念: 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引入泛型的好处是安全简单. 泛型的常用字符代表意思: ? 表示不确定的java类型. T  表示java类型. K V 分别代表java键值中的Key Value. E 代表Element. 下面转载于cnblog上一个写的很好的例子 真的很好,我写了半天,当看到他这个后,立即删除~ 普通泛型

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

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

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

什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:1. 从配置文件(通常是XML配置文件中)得到 sess

mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构

原文:http://blog.csdn.net/oh_mourinho/article/details/51463413 创建maven项目 [java] view plain copy print? <span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSc