基于现在Mybatis 我没有学习太多,就基于简单的增删改查进行基础学习。

学习资源来自    http://www.cnblogs.com/xdp-gacl/p/4261895.html

1  引入jar包

mybatis

  mybatis-3.1.1.jar

【MYSQL驱动包】
    mysql-connector-java-5.1.7-bin.jar

2 2 建立对应数据库表

3 在src目录创建配置文件conf.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" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="s1127736971" />
</dataSource>
</environment>
</environments> <mappers><!-- 这里下面是mapper的注册-->
<mapper resource="my/Mapper/userMapper.xml"/>
<!-- <mapper resource="my.Mapper.userMapper2"/> 记得用class 这是错误的-->
<mapper class="my.Mapper.userMapper2"/>
</mappers> </configuration>

4 编写对应的User类

package my.domain;

public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}

5 编写对应的映射文档Mapper(xml) 之后在对应的conf中添加Mapper(上面已经写好)

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="my.Mapper.userMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<select id="getUser" parameterType="int"
resultType="my.domain.User">
select * from users where id=#{id}
</select> <insert id="insertUser" parameterType="my.domain.User">
insert into users(name,age) values(#{name},#{age})
</insert> <delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete> <update id="updateUser" parameterType="my.domain.User">
update users set name=#{name},age=#{age} where id=#{id}
</update> <select id="getUsers" resultType="my.domain.User">
select * from users
</select> </mapper>

编写测试类

package Test;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.Reader;
import java.util.Collection; import my.Mapper.userMapper2;
import my.domain.User; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; public class test2 { // Reader reader = Resources.getResourceAsReader(config); 这个方法是错误的,大概是里面不能用静态?
//SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(reader);
//SqlSession sqlSession = sqlFactory.openSession(); public SqlSession getSqlSession() throws IOException{
String config = "conf.xml";
Reader reader = Resources.getResourceAsReader(config);
SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(reader);
return sqlFactory.openSession();
} @Test
public void add() throws IOException {
SqlSession sqlSession = getSqlSession();
String statement = "my.Mapper.userMapper.insertUser";
User user = new User(); user.setAge(10);
user.setName("猛虎捕食");
sqlSession.insert(statement, user);
sqlSession.commit();//需要commit 不然没有效果,教程却不用?
sqlSession.close();
} @Test
public void update() throws IOException{
SqlSession sqlSession = getSqlSession();
String statement = "my.Mapper.userMapper.updateUser"; User user = new User();
user.setId(1);
user.setAge(10);
user.setName("这是改后");
sqlSession.update(statement, user);
sqlSession.commit();
sqlSession.close();
} @Test
public void delete() throws IOException{
SqlSession sqlSession = getSqlSession();
String statement = "my.Mapper.userMapper.deleteUser"; sqlSession.delete(statement, 10);
sqlSession.commit();
sqlSession.close(); } @Test
public void queryAll() throws IOException{//这是第二种方式写的用法
SqlSession sqlSession = getSqlSession();
String statement = "my.Mapper.userMapper.getUsers"; Collection<User> users = sqlSession.selectList(statement);
System.out.println(users);
sqlSession.close();
} @Test
public void insert () throws IOException{
SqlSession sqlSession = getSqlSession();
userMapper2 mapper = sqlSession.getMapper(userMapper2.class);
User user = new User();
user.setAge(15);
user.setName("猛虎爬树");
int result = mapper.add(user);
sqlSession.commit();
sqlSession.close();
System.out.println(result); } }

工程大概目录

mybatis的语句还有另一种写法

基于注解的实现,首先要先写出映射接口

package my.Mapper;

import java.util.List;

import my.domain.User;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; public interface userMapper2 { @Insert("insert into users(name,age) values(#{name},#{age})")
public int add(User user); @Delete(" delete from users where id=#{id}")
public int delete(); @Update("update users set name=#{name},age=#{age} where id= #{id}")
public int update(); @Select("select * from users")
public List<User>getAll();
}

之后直接在上面的conf.xml文件添加类后缀的配置

代码简单测试在上面测试类的之后一个方法,到这完成基本增删改查配置。

注意点:

sqlSessionFactory需要commit 和close才能成功

基本流程是,用mybatis的Resouces读取配置文件来开启SqlSession,选择需要执行的语句,SqlSession提交执行语句。

注解形式则不是选择执行语句,而是选择对应接口类。

mybatis的自动生成。。。懒人福利

下载对应jar包 ,在配置好generatorConfig,运行,自动生成Dao(mapper) 、实体类、xml配置。

generatorConfig 模板如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动-->
<classPathEntry location="mysql-connector-java-5.0.8-bin.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis" userId="root" password="s1127736971">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.book.pojo" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="com.book.mapping" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.book.dao" targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>

Mybaties学习的更多相关文章

  1. spring学习 六 spring与mybatis整合

    在mybatis学习中有两种配置文件 :全局配置文件,映射配置文件.mybatis和spring整合,其实就是把mybatis中的全局配置文件的配置内容都变成一个spring容器的一个bean,让sp ...

  2. MyBaties源码解析

    觉得查看源代码确实是一个学习的一种方法 因为很多时候别人把最核心的代码给我们都封装好了 我们直接可以来拿使用 很多时候自己也会问 为什么通过这个方法就可以得到我觉得就是一颗好奇心吧 我算了算 就这三个 ...

  3. java 动态代理—— Mybaties 拦截器链基本原理实现

    1.摘要 Mybaties 中有个分页插件,之前有特意的去了解了一下原理 :https://www.cnblogs.com/jonrain0625/p/11168247.html,从了解中得知分页插件 ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

随机推荐

  1. 使用Vue cli3搭建一个用Fetch Api的组件

    系列参考 ,英文原文参考 我的git代码: https://github.com/chentianwei411/Typeahead 目标: 建立一个输入关键字得到相关列表的组件,用Vuejs2和Fet ...

  2. (Go rails)使用Rescue_from(ActiveSupport:Rescuable::ClassMethods)来解决404(ActiveRecord::RecordNotFound)❌

    https://gorails.com/episodes/handle-404-using-rescue_from?autoplay=1 我的git: https://github.com/chent ...

  3. linux中ping IP可以通但是主机名不通

    在/etc/hosts中配置要ping的主机名称映射 例如: ping test1不通 在/etc/hosts中配置 ip地址  test1

  4. Okhttp 插入缓存拦截器 解析

    我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...

  5. 4.1.2 A Funny Game(POJ 2484)

    Problem description: n枚硬币排成一个圈,A和B轮流从中取一枚或两枚硬币,不过取两枚时,所取的两枚硬币必须是连续的.硬币取走之后留下空位,相隔空位的硬币视为不连续的.A开始先取,取 ...

  6. python记录_day05 字典

    字典 字典由花括号表示{ },元素是key:value的键值对,元素之间用逗号隔开 特点:1.字典中key是不能重复的 且是不可变的数据类型,因为字典是使用hash算法来计算key的哈希值,然后用哈希 ...

  7. Oracle 基本操作--数据类型、修改和删除表、增删改查和复制表

    一.Oracle基础数据类型:数据类型: 创建数据表时,设计数据表的结构问题,也就是设计及确定数据表中各个列的数据类型,是数值.字符.日期还是图像等其他类型. 因为只有设计好数据表结构,系统才会在磁盘 ...

  8. poj-2514-模拟

    http://poj.org/problem?id=2514 Ridiculous Addition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  9. A Bug's Life(向量偏移)

    A Bug's Life Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  10. Qt_自定义菜单

    一.右键菜单 右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现! 重写voidcontextMen ...