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 ...
-
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简单的增删改查以及简单的分页查询实现 <? 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 ...
-
纯Java JDBC连接数据库,且用JDBC实现增删改查的功能
Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...
-
IDEA+Maven 整合SSM框架实现简单的增删改查(新手入门,傻瓜操作)
原博客地址:https://blog.csdn.net/khxu666/article/details/79851070 选用SSM框架的原因在目前的企业级Java应用中,Spring框架是必须的.S ...
随机推荐
-
文件大小K、M、G、T
function size2mb($size,$digits=2){ //digits,要保留几位小数 $unit= array('','K','M','G','T','P');//单位数组,是必须1 ...
-
0009《SQL必知必会》笔记05-表的创建与约束
1.创建表:用CREATE TABLE 语句,要指明:表名(不能与现有表名重复).列名.每列的数据类型 CREATE TABLE product ( prod_id ), vend_id ), pro ...
-
Stuts2的";struts.devMode";设置成true后,不起作用,仍需要重启tomcat
在项目的struts.xml加入了常量配置:<constant name="struts.devMode" value="true" />后,重启服 ...
-
简单的实现QQ通信功能(二)
第二部分:功能需求以及大体思路 一:功能需求: 1. 角色:登录用户. 2. 登录: (1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误. (2)登录时可以选择登录状态,送入数据库 ...
-
Apache RewriteRule QSA 什么意思
看到下面这段代码: RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] The Rewrit ...
-
c# 针对不同数据库进行参数化查询
使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序.OLEDB.SqlClient 和 Oracle 提供程序全部使用不同的语法.例如,用于命名和指定参数的 S ...
-
Android Fragment 嵌套使用报错
在新的SDK每次创建activity时,会自己主动生成 <pre name="code" class="java">public static c ...
-
vdi、vhd、vmdk虚拟格式转换
VirtualBox带来VBoxManager.exe,可以来转换格式. 命令如下(Windows环境,Linux版的应该也有VBoxManager这个二进制文件): VBoxManager存在于Vi ...
-
Mysql--基础(一)
MySQL基础 一.数据库的操作 1.SQL分类: DDL(数据定义语言) :数据定义语言 - Data Definition Language,用来定义数据库的对象,如数据表.视图.索引等.常用 ...
-
linux下安装tomcat和jdk
1.现在的linux服务器一般自带jdk,先查询是否已经安装jdk rpm -qa | grep java rpm -qa | grep jdk 如上则是没有安装,可以直接跳到步骤X,安装jdk.否则 ...