步骤一:mybatis基本配置

1)创建Java项目,在lib下导入mybatis所需要的Jar包,包括链接mysql的mysql-connector-java-5.1.7-bin.jar。

2)在src目录下新建一个mybatis的配置文件

mybatis_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>
<properties resource="db.properties"></properties> <!-- 启用别名 -->
<typeAliases>
<package name="com.feng.domain" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.jdbcUrl}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 配置 自动扫描 包下的 sql映射文件-->
<mappers>
<package name="com.feng.dao" />
</mappers>
</configuration>

db.properties

jdbc.user = root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mybatis0814?useUnicode=true&characterEncoding=utf-8

步骤二:

1)新建表t_user,因为Mybatis不会自动创建数据表,和hibernate不一样,只专注sql

2)定义表的实体类,必须一一对应,否则需要在映射里面设置resultMap结果集映射

User

package com.feng.domain;

import java.util.Date;

public class User
{
// 和表中的字段一一对应,否则需要在对应的Mapper配置文件用到resultMap结果集映射。
private Integer id;
private String username;
private int age;
private Date registerDate; public User(){} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Date getRegisterDate() {
return registerDate;
} public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", age=" + age
+ ", registerDate=" + registerDate + "]";
}

3)在dao的包下,新建sql映射配置xml

UserMapper.xml   必须和实体类对应  格式:实体类+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">
<!-- 完整namespace,取包名+映射文件 -->
<mapper namespace="com.feng.dao.UserMapper">
<!-- 对应的id为映射接口的方法 ,parameterType 设置为入参的类型,因为我在配置文件中启用了别名,自动扫描domain包,所以不需要写包名,如果没有就是com.feng.domain.User
resultType就是返回的结果集类型,如果是基本类型,mybaits已经封装好了,直接写类型就好;如果是实体类,就要写上实体类的类型,也是可以别名的。
useGeneratedKeys="true" keyProperty="id" :启用这段后,可以得到新增的数据的主键id
#{}里面新增的实体属性值,用#{},也可以用${value};推荐用#{},因为会自动使用parperstatement,防止sql注入
-->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into t_user(username,age,registerDate)
values(#{username},#{age},#{registerDate})
</insert>
<delete id = "deleteUser" parameterType="Integer" >
delete from t_user where id = #{id}
</delete>
<update id = "updateUser" parameterType="User" >
update t_user
set
username = #{username},age=#{age},registerDate=#{registerDate}
where
id = #{id}
</update>
<!-- 多个数据 和 单个 数据 ,他们的类型都是一样,都是User -->
<select id = "getUserById" parameterType="Integer" resultType = "User">
select * from t_user where id = #{id}
</select>
<select id = "getAllUser" resultType="User">
select * from t_user
</select>
<select id = "getAllUser1" parameterType="map" resultType="User">
select * from t_user where age > #{age} and username = #{username}
</select>
</mapper>

这里注意一点,update、delete 返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。

insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。

4)操作接口

UserMapper.java

package com.feng.dao;

import java.util.List;
import java.util.Map; import com.feng.domain.User; public interface UserMapper
{
//增加一个用户
public void addUser(User user); //删除一个用户
public void deleteUser(Integer id); //修改用户信息
public void updateUser(User user); //得到一个用户
public User getUserById(Integer id); //得到所有用户
public List<User> getAllUser(); // 多入参情况下用map
public List<User> getAllUser1(Map<String, Object> map); }

步骤三

1)新建测试类Test_Crud.java

package com.feng.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap; 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.Before;
import org.junit.Test; import com.feng.domain.User; public class Test_Crud { private SqlSessionFactory sqlSessionFactory = null; @Before
public void init() throws IOException {
// 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
InputStream inputStream = Resources
.getResourceAsStream("mybatis_conf.xml");
// 创建SqlSessionFactory工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void addUser() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try { sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setAge(22);
user.setRegisterDate(new Date());
user.setUsername("feng");
sqlSession.insert("com.feng.dao.UserMapper.addUser", user);
sqlSession.commit();
System.out.println(user.getId()); } catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} @Test
public void deleteUser() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try { sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("com.feng.dao.UserMapper.deleteUser", 2);
sqlSession.commit(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} @Test
public void updateUser() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try { sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setAge(22);
user.setId(1);
user.setRegisterDate(new Date());
user.setUsername("wei");
sqlSession.update("com.feng.dao.UserMapper.updateUser", user);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} @Test
public void getUserById() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession(); User user = sqlSession.selectOne(
"com.feng.dao.UserMapper.getUserById", 1);
System.out.println(user.toString());
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} @Test
public void getAllUser() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession(); java.util.List<User> list = sqlSession
.selectList("com.feng.dao.UserMapper.getAllUser");
for (User user : list) {
System.out.println(user.toString());
}
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} @Test
// 多入参情况下,用map
public void getAllUser1() {
// 创建并且打开sqlsession
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("age", 20);
map.put("username", "feng"); java.util.List<User> list = sqlSession.selectList(
"com.feng.dao.UserMapper.getAllUser1", map);
for (User user : list) {
System.out.println(user.toString());
}
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
} }

最后的结构图如下

Mybatis基础-完整CRUD操作的更多相关文章

  1. 【Mybatis】MyBatis对表执行CRUD操作(三)

    本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...

  2. 使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  3. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  4. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  5. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  6. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  7. mybatis(二)执行CRUD操作的两种方式配置和注解

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  8. MyBatis学习总结_02_使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  9. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

随机推荐

  1. (面试题)请用C语言实现在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中

    分析:长整数相加,将结果分为高位和低位部分,分别保存在两个32整数中. 比如:unsigned int a = 0xFFFFFFFF, unsigned int b = 0x1, 结果用unsigne ...

  2. github上更新fork的别人的项目

    直接上解决方案的步骤 (1)在自己fork后的项目的位置上,点击New pull request. (2)比较和原创版本(base)的变化 (3 ) compare across forks. 使得左 ...

  3. JS如何做2048(详细)

    在做2048之前,我们首先要了解它的游戏规则,以及运行逻辑 首先,来看上半部分 除了标题外还有记录每次获得的分数,以及总分数,还有一个重新开始按钮,这个最大分数会保存下来. 来看页面内容 页面内容由1 ...

  4. 虚拟机安装master,克隆slave0、slave1(多台机相连,网络匹配)

    1.在虚拟机中创建一个名叫master的主机 2.创建成功后,打开编辑选项——虚拟网络网络编辑器,填网关 3.打开终端,进入root权限,编写命令 设置虚拟机DNS 4.给master网络配置好后,克 ...

  5. Makefile中 的 phony target,empty target

    phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...

  6. Nginx突破高并发的性能优化 - 运维笔记

    在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题.今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一.这里 ...

  7. 2. 软件有很多种,也有各种分类办法: ShrinkWrap (在包装盒子里面的软件,软件在CD/DVD上); Web APP (基于网页的软件); Internal Software (企业或学校或某组织内部的软件); Games (游戏); Mobile Apps (手机应用); Operating Systems (操作系统); Tools

     选取对你最相关的一类软件,  请回答:(web app)  1) 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的?  他们的目标都是盈利么?  他们的目标都是赚取用户 ...

  8. 50道sql练习题及答案与详细分析

    数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course( ...

  9. Session&Cookie&localStorage浅谈

    Session&Cookie&localStorage 领导让我开发一个有两张信息表单需要提交页面的网站,我作为一名开发人员,这个需求太简单了,和领导说直接存session sessi ...

  10. python学习之flask接口开发,环境变量扩展,网络编程requests

    python基础 flask之mock接口 所谓mock接口,其实就是我们在正式接口还没联调或者是测试接口没有正式使用时,自己创建一个模拟接口,来供项目暂时打通功能或者测试流程梳理的桥梁,而我们这儿使 ...