Mr·Hu原创作品。转载请注明出处http://www.cnblogs.com/huxiuqian/p/7642886.html

国庆已过,要安心的学习了。

SSM框架以前做过基本的了解,相比于ssh它更为优秀。

现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能:

基本结构: (PS:其实这个就是用的Mapper代理,只不过名字写成的Dao,在下面的代码中可以体现出来Mapper)

       

1.引入jar包:

  链接: https://pan.baidu.com/s/1qYmehmk

  密码: 8tbn

 2.数据库搭建

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
)

3.日志文件配置

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.在src下创建mybatis核心配置文件SqlMapConfig.xml

注意修改url、username、password.

<?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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/huiyushixun?characterEncoding=UTF-8"/>
<property name="username" value="root" />
<property name="password" value="abc123." />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml"/>
</mappers> </configuration>

5.编写po类

package com.hpe.ssm01.po;

public class User {
private int id;
private String username;
private String birthday;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [用户ID=" + id + ", 用户名=" + username + ", 生日=" + birthday + ", 性别=" + sex + ", 地址="
+ address + "]\n";
} }

6.在src下创建sql映射文件User.xml

  1. 由mapper标签开始,由/mapper结束,可以把它想成一个空间,是映射文件  。
  2. 属性namespace:空间名,主要在代理中使用。这个namespace是唯一的。
  3. 这里把mapper标签和接口联系在一起了,namespace=写接口路径。
<?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="com.hpe.ssm01.dao.UserDao">
<!-- 增加用户 -->
<insert id="addUser" parameterType="com.hpe.ssm01.po.User">
insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.hpe.ssm01.po.User">
update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}
</update>
<!-- 获取所有用户信息 -->
<select id="findUser" resultType="com.hpe.ssm01.po.User">
select * from user
</select>
<!-- 根据id获取用户信息 -->
<select id="findUserById" parameterType="int" resultType="com.hpe.ssm01.po.User">
select * from user where id = #{id}
</select>
<!-- 根据username模糊查询获取用户信息 -->
<select id="findUserByName" parameterType="String" resultType="com.hpe.ssm01.po.User">
select * from user where username like #{key}
</select>
</mapper>

7.使用测试类进行测试(使用Junit进行测试,可以进行CRUD操作,如果想用控制台进行操作请看8、9步骤)

SqlSession别忘关闭!
package com.hpe.ssm01.test;

import java.io.IOException;
import java.io.InputStream; 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; import com.hpe.ssm01.po.User; public class MainTest {
@Test // junit 的测试方法 用于单元测试
public void findUserById() throws IOException{
// 1. 创建SqlSessionFactory
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); // 2. 由工厂创建SqlSession
SqlSession sqlSession = factory.openSession(); // 3. 根据映射调用Sql
User user = sqlSession.selectOne("com.hpe.ssm01.dao.UserDao.findUserById", 1); // 4. 打印
System.out.println(user); // 5. 关闭SqlSession
sqlSession.close();
}
}

8.创建Mapper接口

注意:

Mapper.xml文件中的namespace与mapper接口的类路径相同。
Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。 
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。

package com.hpe.ssm01.dao;

import java.util.List;

//import org.apache.ibatis.annotations.Select;

import com.hpe.ssm01.po.User;

public interface UserDao {
//@Select("insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})")
public void addUser(User user);
public void deleteUser(int id);
public void updateUser(User user);
List<User> findUser();
//@Select("select * from user where id = #{id}")
public User findUserById(int id);
List<User> findUserByName(String name);
}

9.在控制台上进行增删改查操作

package com.hpe.ssm01.view;

import java.io.InputStream;
import java.util.List;
import java.util.Scanner; 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 com.hpe.ssm01.dao.UserDao;
import com.hpe.ssm01.po.User; public class Main {
static Scanner s = new Scanner(System.in);
private static SqlSessionFactory factory;
private static InputStream inputStream;
static {
try {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
while (true) {
System.out.println("***************************************");
System.out.println("------------基于ssm的CRUD测试------------");
System.out.println("1.增加 2.删除 3.修改 4.查询 0.退出");
System.out.println("***************************************");
System.out.println("请选择功能:");
String s1 = s.next();
switch (s1) {
case "1":
System.out.println("----------------添加用户----------------");
System.out.println("请输入用户名:");
String username = s.next();
System.out.println("请输入生日:(XXXX-XX-XX)");
String birthday = s.next();
System.out.println("请输入性别:(男/女)");
String sex = s.next();
System.out.println("请输入地址:");
String address = s.next();
User user = new User();
user.setUsername(username);
user.setBirthday(birthday);
user.setSex(sex);
user.setAddress(address);
addUser(user);
break;
case "2":
System.out.println("----------------删除用户----------------");
System.out.println("请输入需要删除的用户ID:");
int id = s.nextInt();
if (findUserById(id) == null) {
System.out.println("用户不存在,是否查询所有用户信息?Y/N");
String choose = s.next();
if ("Y".equals(choose) || "y".equals(choose)) {
findUser();
}
} else {
deleteUser(id);
}
break;
case "3":
System.out.println("----------------修改用户----------------");
System.out.println("请输入需要修改的用户ID:");
int id1 = s.nextInt();
if (findUserById(id1) == null) {
System.out.println("用户不存在,是否查询所有用户信息?Y/N");
String choose = s.next();
if ("Y".equals(choose) || "y".equals(choose)) {
findUser();
}
} else {
User user1 = findUserById(id1);
System.out.println("是否修改用户名?Y/N");
String choose1 = s.next();
if ("Y".equals(choose1) || "y".equals(choose1)) {
System.out.println("请输入用户名:");
String username1 = s.next();
user1.setUsername(username1);
} else {
user1.setUsername(user1.getUsername());
}
System.out.println("是否修改生日?Y/N");
String choose2 = s.next();
if ("Y".equals(choose2) || "y".equals(choose2)) {
System.out.println("请输入生日:(XXXX-XX-XX)");
String birthday1 = s.next();
user1.setBirthday(birthday1);
} else {
user1.setBirthday(user1.getBirthday());
}
System.out.println("是否修改性别?Y/N");
String choose3 = s.next();
if ("Y".equals(choose3) || "y".equals(choose3)) {
System.out.println("请输入性别:(男/女)");
String sex1 = s.next();
user1.setSex(sex1);
} else {
user1.setSex(user1.getSex());
}
System.out.println("是否修改地址?Y/N");
String choose4 = s.next();
if ("Y".equals(choose4) || "y".equals(choose4)) {
System.out.println("请输入地址:");
String address1 = s.next();
user1.setAddress(address1);
} else {
user1.setAddress(user1.getAddress());
}
updateUser(user1);
}
break;
case "4":
System.out.println("----------------查询方式----------------");
System.out.println("1.查询所有用户信息");
System.out.println("2.按用户ID查询");
System.out.println("3.按用户名查询(模糊查询)");
System.out.println("PS:按除1、2、3之外,输入任意键返回主菜单");
System.out.println("--------------------------------------");
System.out.println("请选择功能:");
String s2 = s.next();
switch (s2) {
case "1":
findUser();
break;
case "2":
System.out.println("请输入需要查询的用户ID:");
int id2 = s.nextInt();
if (findUserById(id2) == null) {
System.out.println("用户不存在,是否查询所有用户信息?Y/N");
String choose = s.next();
if ("Y".equals(choose) || "y".equals(choose)) {
findUser();
}
} else {
System.out.println(findUserById(id2));
}
break;
case "3":
System.out.println("请输入需要查询的用户名:");
String name2 = s.next();
if (findUserByName("%" + name2 + "%") == null) {
System.out.println("用户不存在,是否查询所有用户信息?Y/N");
String choose = s.next();
if ("Y".equals(choose) || "y".equals(choose)) {
findUser();
}
} else {
System.out.println(findUserByName("%" + name2 + "%"));
}
break;
default:
System.out.println("返回主菜单");
}
break;
case "0":
System.out.println("系统已关闭");
System.exit(0);
default:
System.out.println("您输入的内容有误,请重新输入");
}
}
} private static void addUser(User user) {
SqlSession session = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
userDao.addUser(user);
session.commit();
} finally {
session.close();
}
} private static void deleteUser(int id) {
SqlSession session = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
userDao.deleteUser(id);
session.commit();
} finally {
session.close();
}
} private static void updateUser(User user) {
SqlSession session = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
userDao.updateUser(user);
session.commit();
} finally {
session.close();
}
} private static void findUser() {
SqlSession session = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> list = userDao.findUser();
System.out.println(list);
session.commit();
} finally {
session.close();
}
} private static User findUserById(int id) {
SqlSession session = null;
User user = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
user = userDao.findUserById(id);
session.commit();
} finally {
session.close();
}
return user;
} private static List<User> findUserByName(String name) {
SqlSession session = null;
List<User> list = null;
try {
session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
list = userDao.findUserByName(name);
session.commit();
} finally {
session.close();
}
return list;
}
}

Mr·Hu原创作品。转载请注明出处http://www.cnblogs.com/huxiuqian/p/7642886.html

基于SSM之Mybatis接口实现增删改查(CRUD)功能的更多相关文章

  1. Mybatis学习——基本增删改查(CRUD)

    Eclipse+Mybatis+MySql 1.所需jar 2.项目目录 3.源代码 package com.zhengbin.entity; public class Student { priva ...

  2. ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)

    Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...

  3. MyBatis -- 对表进行增删改查(基于注解的实现)

    1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1  首先须要定义映射sql的 ...

  4. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Spring Boot 使用Mybatis注解开发增删改查

    使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...

  6. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  7. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  8. Mybatis入门之增删改查

    Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...

  9. 基于AT UI实现表格的增删改查遇到的坑

    基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...

随机推荐

  1. 使用 Palette 让你的 UI 色彩与内容更贴合

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 今天介绍一个 An ...

  2. linux c编程:初识进程与线程

    p { margin-bottom: 0.25cm; line-height: 120% } (一) 认识进程 在Linux系统中,每一个进程都有自己的ID,就如同人的身份证一样.linux中有一个数 ...

  3. 【★】Web精彩实战之<智能迷宫>

    JS精彩实战之<智能迷宫>      ---宝贵编程经验分享会--- hello大家好,这里是Web云课堂,之前的一年里我们经历了Html和CSS的系统攻城,此时的你们已经是做静态(动静结 ...

  4. §--------算法分界线--------§

    如题 As said in the title~ 计算机的cpu计算从根源上由最基本的逻辑电路(晶体管)组成,由此衍生出最基本的数值运算:四则运算.而此后所有的高级算法都是建立在这个基本计算原理(逻辑 ...

  5. MVC 常用扩展点:过滤器、模型绑定等

    MVC 常用扩展点:过滤器.模型绑定等 一.过滤器(Filter) ASP.NET MVC中的每一个请求,都会分配给对应Controller(以下简称"控制器")下的特定Actio ...

  6. 如何设置Cookie 的值为中文的内容

    默认情况下,cookie的值是不允许中文内容的.可以借助于java.net.URLEncoder先对中文字符串进行编码,将编码后的结果设为cookie值.当程序要读取cookie值时,先读取,然后使用 ...

  7. 201521123112《Java程序设计》第2周学习总结

    1.本周学习总结 本周在课堂面授课粗略讲了<Java学习笔记>中的第三章,其内容大部分都与上学期学习的数据结构差不多,所以只是粗略的复习了一下就带过,然后通过将PTA上的实验便于我们本周的 ...

  8. 201521123119 《Java程序设计》第13周学习总结

    1. 本周学习总结 Q以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 Q1. 网络基础 Q1.1 比较ping www.baidu.com与ping cec. ...

  9. Hibernate哪点事?

    1.为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection A ...

  10. Linux-hexdump命令调试event驱动—详解(13)

    hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用 1.调试 键盘驱动 讲解 当我们insmod挂载了键盘驱动后,找到键盘驱动被放在event1设备里, 此时没有按 ...