【SSM架构】博客系统开发(四)-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);
}

猜你喜欢

转载自blog.csdn.net/qq_35325539/article/details/106789393