【SSM架构】博客系统开发4-mybatis增删改查
mybatis相关知识准备
mybatis 是一个开源的数据持久层框架。它内部封装了JDBC访问数据的操作.
而ssm架构就是= spring + springmvc + mybatis
mybatis项目全过程
1 创建数据库表
我们的测试项目的数据库按照以下设计
数据库表名:userInfo
id //自增主键
userName varchar //用户名
password varchar //密码
note varchar //详情
2 导包
mybatis-3.2.6.jar
mysql的驱动包
链接:https://pan.baidu.com/s/1rEjXINyTwAIhcviNukuLUA
提取码:u7yj
新建java工程,然后建一个lib 目录,把上面的两个jar包复制到里面,然后添到构建路径里
3 建配置文件
在工程中建一个源文件夹叫 config ( 和 src 平级)
在下面建立dbconfig.propertie和mybatis-config.xml
数据库相关的配置文件:dbconfig.properties
*具体数据库连接相关信息,根据自己的改写 *
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test
db.username=root
db.password=root
再建一个配置文件 mybatis-config.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="dbconfig.properties" />
<!--配置数据源-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml" />
</mappers>
</configuration>
4 编写映射文件
在config文件夹下建立mappers文件夹,再建立UserMapper.xml
config/mappers/UserMapper.xml
<?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>
</mapper>
5 建实体类
在文件夹src下建立包com.entity
创建类UserInfo.java
public class UserInfo {
private int id;
private String userName;
private String password;
private String note;
...get ..set ..toString() 略//在按alt+shift+s生成get,set,toString方法
}
6 准备接口
在文件夹src下建立包com.mapper
创建类UserMapper.java
package com.mapper;
import com.entity.UserInfo;
public interface UserMapper {
UserInfo getUserById(int id);
}
7 配置映射文件
在config下建立mappers建立UserMapper.xml
<?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.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.entity.UserInfo">
select * from UserInfo where id = #{id}
</select>
</mapper>
<!--
注意 (使用mapper代理的方式, 让mybatis自动帮我们生成接口的实现代理类)
(1) namespace 必须和接口的全类名(类名+包名)相类
(2) sql语句的id必须和接口中的方法名完全相同
(3) parameterType 必须和接口中声明的方法的参数类型相同
(4) resultType 必须和接口中的方法的返回值类型相同
-->
这是此项目的整体目录架构
8 测试
在src下建立测试类test.java
package com.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 com.entity.UserInfo;
import com.mapper.UserMapper;
public class Test {
public static void main(String[] args) throws IOException {
//读配置文件
InputStream in=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory facotry=new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession session =facotry.openSession();
//得到mapper 的代理实现
UserMapper userMapper=session.getMapper(UserMapper.class);
//进行操作 查询id=1的信息
UserInfo user=userMapper.getUserById(1);
System.out.println(user);
//添理资源
session.close();
}
}
到这里运行测试类就可以查询指定id的数据了
运行结果
9 总结
此次项目的数据:
数据库名称:test
实例对象和数据表名:UserInfo
接口名称:UserMapper
10 增删改查扩展
改接口UserMapper.java
public interface UserMapper {
UserInfo getUserById(int id);
int addUser(UserInfo user);
int deleteUserById(int id);
int updateUser(UserInfo user);
List<UserInfo> getAllUser();
}
改配置文件UserMapper.xml
<?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.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.entity.UserInfo">
select * from UserInfo where id = #{id}
</select>
<insert id="addUser" parameterType="com.entity.UserInfo" >
insert into userInfo (userName,password,note) values( #{userName} , #{password}, #{note} )
</insert>
<update id="updateUser" parameterType="com.entity.UserInfo">
update userInfo set userName= #{userName}, password=#{password} , note =#{note} where id =#{id}
</update>
<delete id="deleteUserById" parameterType="int" >
delete from userInfo where id =#{id}
</delete>
<select id="getAllUser" resultType="com.entity.UserInfo">
select * from user;
</select>
</mapper>
改运行测试类test.java
public class Test {
public static void main(String[] args) throws IOException {
//读配置文件
InputStream in=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory facotry=new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession session =facotry.openSession();
//得到mapper 的代理实现
UserMapper userMapper=session.getMapper(UserMapper.class);
//进行操作 可以解开相应注释测试
/*@@@@@根据id查询
UserInfo user=userMapper.getUserById(1);
System.out.println(user); */
/*@@@@@添加
UserInfo user=new UserInfo();
user.setUserName("admin");
user.setPassword("123");
user.setNote("软件专业");
int result=userMapper.addUser(user);
if(result==1) {
System.out.println("添加成功");
}
else {
System.out.println("添加失败");
}
*/
/*@@@@@删除
userMapper.deleteUserById(17);
System.out.println("删除成功");*/
/*@@@@@修改
UserInfo user=userMapper.getUserById(1);
System.out.println("修改之前:");
System.out.println(user);
user.setUserName("超级用户AAA");
user.setPassword("superadmin");
user.setNote("这是一个改过的用户");
userMapper.updateUser(user);
user=userMapper.getUserById(1);
System.out.println("改过之后:");
System.out.println(user); */
//@@@@@查询列表
/*List<UserInfo> userList= userMapper.getAllUser();
for(UserInfo u: userList) {
System.out.println(u);
}*/
//对于增,删除,改等动作要提交事务
session.commit();
//添理资源
session.close();
}
}
mybatis中的注解
mybatis中的注解就是接口中的声明
@Select("select * from table")
注解后就不用再配置XML了,在接口函数上方用@进行注解,@后面放入相应的sql语句,就可以直接调用数据库了,不用配置数据库映像xml文件了,当然想要这么用要导入mybatis的jar包,jar包文件请看博客系统项目开发(三)
//文件名UserMapper.java
//例 把接口里的方法,全用注解方式处理
public interface UserMapper {
@Select("select * from userInfo where id=#{id}")
UserInfo getUserById(int id);
@Insert("insert into userInfo (userName,password,note) values (#{userName},#{password},#{note} ) ")
int addUser(UserInfo user);
@Delete("delete from userInfo where id =#{id}")
int deleteUserById(int id);
@Update("update userInfo set userName= #{userName}, password=#{password} , note =#{note} where id =#{id} ")
int updateUser(UserInfo user);
@Select("select * from userInfo ")
List<UserInfo> getAllUser();
//对比:
/**
* 没用注解实现
* @param user 用它把用户名和密码传进去
* @return 完整的用户信息
*/
UserInfo login(UserInfo user);
/**
* 用注解实现
* @param map 用于传入参数
* @return 完整的用户信息
*/
@Select("select * from userInfo where userName=#{userName} and password=#{password} ")
UserInfo login3(@Param("userName") String userName,@Param("password")String password);
}