基于SSM之Mybatis接口实现增删改查(CRUD)功能
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
- 由mapper标签开始,由/mapper结束,可以把它想成一个空间,是映射文件 。
- 属性namespace:空间名,主要在代理中使用。这个namespace是唯一的。
- 这里把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)功能的更多相关文章
- Mybatis学习——基本增删改查(CRUD)
Eclipse+Mybatis+MySql 1.所需jar 2.项目目录 3.源代码 package com.zhengbin.entity; public class Student { priva ...
- ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)
Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...
- MyBatis -- 对表进行增删改查(基于注解的实现)
1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1 首先须要定义映射sql的 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Spring Boot 使用Mybatis注解开发增删改查
使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...
- Mybatis实现简单增删改查
Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...
- MyBatis简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- Mybatis入门之增删改查
Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...
- 基于AT UI实现表格的增删改查遇到的坑
基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...
随机推荐
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- .Net Mvc实现各种表格随意切换插件
一套Js代码,.只要改参数 在3种表格之间任意切换-(使用Js面向对象封装,可重写方法) 任意表格皮肤随便切换 flextgrid/bootstrapt/jqgrid 1 001 @{ 002 ...
- spring报错NoClassDefFoundError等与第三方jar包导入问题
今天配置spring,遇到各种报错的问题,做一个小小总结. 1.刚开始我忘了引入commons-logging,报错.--解决方式:下载并引入该jar包 2.spring以及commons-loggi ...
- 编程零基础应当如何开始学习 Python?
提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...
- Web in Linux小笔记001
Linux灾难恢复: Root密码修复 Centos single Filesystem是硬盘文件根目录,无法再cd ..就像macitosh 硬盘图标 Pwd:显示绝对路径 MBR修复 模拟MBR被 ...
- 转:深入Java集合学习系列:HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所 ...
- 九度OJ 1006 ZOJ
#include <iostream> #include <string> using namespace std; int getO(string str,int & ...
- 【Alpha】Daily Scrum Meeting——Day3
站立式会议照片 1.本次会议为第三次 Meeting会议: 2.本次会议于早上9:40在陆大楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 每个人的工作分配 成 员 昨天已完成 ...
- 201521123081《Java程序设计》 第1周学习总结
#1. 本周学习总结 ###JAVA是1995年SUN推出的一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的,安全的,结构的,中立的,可移植的,性能很优异的,多线程的,动态的语言.是世界上广 ...
- 201521123002《Java程序设计》第11周学习总结
作业参考文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5 ...