mybatis xml 方式的增删改查基本用法

纸上得来终觉浅
mybatis xml 方式的基本用法
    一个简单的权限控制请求
创建数据库表语句
    create table sys_user(id bigint not null auto_increment,
	user_name varchar(50),
	user_password varchar(50),
	user_email varchar(50),
	user_info varchar(50),
	head_img blob,
	create_time datetime,
	primary key(id)
	);
	create table sys_role(
	id bigint not null auto_increment,
	role_name varchar(50),
	enabled int,
	create_by bigint,
	create_time datetime,
	primary key (id)
	);
	create table sys_privilege(
	id bigint not null auto_increment,
	privilege_name varchar(50),
	privilege_url varchar(200),
	primary key (id));
	create table sys_role_privilege(
	role_id bigint,
	privilege_id bigint);
	create table sys_role_role(
	user_id bigint,
	role_id bigint
	);
	//test
	insert into sys_user values("1",
	"admin",
	"123456",
	"[email protected]",
	"manager",
	null,
	"2018-05-12 23:00:00");
	insert into sys_user values("1",
	"admin1",
	"1234561",
	"[email protected]",
	"manager1",
	null,
	"2018-05-12 23:00:00");
	insert into sys_role values(
	"2",
	"manager2",
	"2",
	"2",
	"2018-05-12 23:00:00"
	);
	insert into sys_user_role values("1","1");
	insert into sys_user_role values("2","2");
	insert into sys_privilege values ("1",
	"用户管理",
	"/users");
	insert into sys_privilege values ("2",
	"用户",
	"/roles");
	insert into sys_role_privilege values ("1","3");
	insert into sys_role_privilege values ("1","1");

public class SysPrivilege {
	private long id;
	private String privilegeName; 
	private String privilegeUrl;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getPrivilegeName() {
		return privilegeName;
	}
	public void setPrivilegeName(String privilegeName) {
		this.privilegeName = privilegeName;
	}
	public String getPrivilegeUrl() {
		return privilegeUrl;
	}
	public void setPrivilegeUrl(String privilegeUrl) {
		this.privilegeUrl = privilegeUrl;
	}
	 

public class SysRole {
	private long id;
	private String roleName;
	private int enabled;
	private long createBy;
	private Date createTime;
	private SysUser user;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public int getEnabled() {
		return enabled;
	}
	public void setEnabled(int enabled) {
		this.enabled = enabled;
	}
	public long getCreateBy() {
		return createBy;
	}
	public void setCreateBy(long createBy) {
		this.createBy = createBy;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public SysUser getUser() {
		return user;
	}
	public void setUser(SysUser user) {
		this.user = user;
	}
	@Override
	public String toString() {
		return "SysRole [id=" + id + ", roleName=" + roleName + ", enabled=" + enabled + ", createBy=" + createBy
				+ ", createTime=" + createTime + ", user=" + user + "]";
	}
	 
}

public class SysRolePrivilege {
    private long roleId;
    private long privilegeId;
	public long getRoleId() {
		return roleId;
	}
	public void setRoleId(long roleId) {
		this.roleId = roleId;
	}
	public long getPrivilegeId() {
		return privilegeId;
	}
	public void setPrivilegeId(long privilegeId) {
		this.privilegeId = privilegeId;
	}
}

public class SysUser {
	private long id;
	private String userName;
	private String userPassword;
	private String userEmail;
	private String userInfo;
	private byte[] headImg;
	private Date createTime;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	public String getUserEmail() {
		return userEmail;
	}
	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}
	public String getUserInfo() {
		return userInfo;
	}
	public void setUserInfo(String userInfo) {
		this.userInfo = userInfo;
	}
	public byte[] getHeadImg() {
		return headImg;
	}
	public void setHeadImg(byte[] headImg) {
		this.headImg = headImg;
	}
	
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Override
	public String toString() {
		return "SysUser [id=" + id + ", userName=" + userName + ", userPassword=" + userPassword + ", userEmail="
				+ userEmail + ", userInfo=" + userInfo + ", headImg=" + Arrays.toString(headImg) + "]";
	}

}

public class SysUserRole {
    private long userId;
    private long roleId;
	public long getUserId() {
		return userId;
	}
	public void setUserId(long userId) {
		this.userId = userId;
	}
	public long getRoleId() {
		return roleId;
	}
	public void setRoleId(long roleId) {
		this.roleId = roleId;
	}
    
}

上面是实体类,接口
public interface SysUserMapper {
    SysUser selectById(long id);
    List<SysUser> selectAll();
    List<SysRole> selectRoleByid(long usid);
    int insert(SysUser role);
    int insert1(SysUser role);
    int deleteById(long id);
    int updateById(SysUser user);
}

<?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.mybatis.demo.mapper.SysUserMapper">
	<resultMap type="com.mybatis.demo.SysUser" id="userMap">
		<id property="id" column="id" />
		<result property="userName" column="user_name" />
		<result property="userPassword" column="user_password" />
		<result property="userEmail" column="user_email" />
		<result property="userInfo" column="user_Info" />
		<result property="headImg" column="head_img" jdbcType="BLOB" />
		<result property="userName" column="user_name" />
		<result property="createTime" column="create_time" jdbcType="TIMESTAMP" />
	</resultMap>
	<select id="selectById" resultMap="userMap">
		select * from sys_user where
		id=#{id}
	</select>
	<!--查询全部,一般select 字段名称1,字段名称2 from table表名 ,而不是select * -->
	<select id="selectAll" resultType="com.mybatis.demo.SysUser">
		select * from sys_user;
	</select>
	<select id="selectRoleByid" resultType="com.mybatis.demo.SysRole">
		select r.id ,
		r.role_name roleName,
		r.enabled,
		r.create_by as createBy,
		r.create_time as createTime,
		u.user_Name as "user.name",
		u.user_email as "user.userEmail"
		from
		sys_user u
		inner join sys_user_role ur on u.id=ur.user_id
		inner join sys_role r on ur.role_id =r.id
		where u.id=#{userId}
	</select>
	<!-- sql语句分行写 这样报错非常明显可以看出是第几行 -->
	<!--如果xml报错但是不显示,可以xml文件 鼠标右键,点击validate,然后之后错误就会显示出来的。  -->
	<insert id="insert">
        insert into sys_user values(#{id},#{userName},
        #{userPassword},
        #{userEmail},
        #{userInfo},
        #{headImg , jdbcType=BLOB}, #{createTime , jdbcType=TIMESTAMP})
	</insert>
	<insert id="insert1" useGeneratedKeys="true" keyProperty="id">
        insert into sys_user (user_name ,user_password,user_email,user_info,head_img,create_time) values(#{userName},
        #{userPassword},
        #{userEmail},
        #{userInfo},
        #{headImg , jdbcType=BLOB}, #{createTime , jdbcType=TIMESTAMP})
	</insert>
	<delete id="deleteById">
	    delete from sys_user where id=#{id}
	</delete>
	<!-- jdbcType指定数据类型 -->
	<!-- sql语法按照你的数据库版本来 -->
	<update id="updateById">
	    update sys_user
	    set user_name=#{userName},
	    user_password=#{userPassword},
	    user_email=#{userEmail},
	    user_info=#{userInfo},
	    head_img =#{headImg,jdbcType=BLOB},
	    create_time=#{createTime,jdbcType=TIMESTAMP}
	    where id= #{id}
	</update>
</mapper>

<?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>
	<settings>
		<setting name="logImpl" value="LOG4J" />
	</settings>
	<typeAliases>
		<package name="com.mybatis.demo" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="UNPOOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<!-- 当前xml命名空间-->
	
	<mappers>
	    <package name="com.mybatis.demo.mapper"/>
	</mappers>
</configuration>

package ibatis.test;

import java.io.IOException;

import java.io.Reader;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.binding.MapperRegistry;
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.BeforeClass;
import org.junit.Test;
import com.mybatis.demo.Country;
import com.mybatis.demo.SysRole;
import com.mybatis.demo.SysUser;
import com.mybatis.demo.mapper.SysUserMapper;

import junit.framework.Assert;

public class MyCountryTest {
	private static SqlSessionFactory sql;

	@BeforeClass
	public static void init() throws IOException {
		// 读取配置文件
		Reader read = Resources.getResourceAsReader("mybatis-config.xml");
		// 构建sqlsession工厂
		sql = new SqlSessionFactoryBuilder().build(read);
		read.close();
	}

	/*
	 * @Test public void testSelectAll(){ SqlSession openSession =
	 * sql.openSession(); List<Country> selectList =
	 * openSession.selectList("selectAll"); System.out.println(selectList);
	 * openSession.close(); }
	 */
	/**
	 * Mapped Statements collection does not contain value for
	 * com.mybatis.demo.UserMapper.selectAll Type interface
	 * com.mybatis.demo.UserMapper is not known to the MapperRegistry.
	 * 配置包扫描,所以mapper接口 应该放到扫描包路径下 解决上面异常 
	 * Invalid bound statement (not found):
	 * 
	 */
	/**
	 * <!-- 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by
	 * #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order
	 * by "id". 2. $将传入的数据直接显示生成在sql中。如:order by
	 * $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,
	 * 如果传入的值是id,则解析成的sql为order by id. 3. #方式能够很大程度防止sql注入,而$方式无法防止Sql注入。 一般使用#
	 * -->
	 */
	@Test
	public void testSelectSysUser() {
		SqlSession session = sql.openSession();
		SysUserMapper mapper = session.getMapper(SysUserMapper.class);
		SysUser selcetByid = mapper.selectById(1);
		System.out.println(selcetByid);
		session.close();
	}
	@Test
	public void testSelectAll(){
		SqlSession session =sql.openSession();
		SysUserMapper mapper = session.getMapper(SysUserMapper.class);
		List<SysUser> selectAll = mapper.selectAll();
		System.out.println(selectAll);
		session.close();
	}
	@Test
	public void testSelectRoleByid(){
		SqlSession session =sql.openSession();
		SysUserMapper mapper = session.getMapper(SysUserMapper.class);
		 List<SysRole> selectRoleByid = mapper.selectRoleByid(1);
		System.out.println(selectRoleByid);
		session.close();
	}
	/**
	 * reflection.ReflectionException 
	 * 单词别写错,反射调用了getset 如果没有这个单词肯定报错
	 *  There is no getter for property named 
	 *  sqlsession 不手动执行commit 不会提交数据库
	 */
	@Test
	public void testInsert(){
		SqlSession session =sql.openSession();
		SysUserMapper mapper = session.getMapper(SysUserMapper.class);
		SysUser user = new SysUser();
		user.setCreateTime(new Date());
		user.setHeadImg(new byte[]{1,2});
		user.setUserEmail("[email protected]");
		user.setUserInfo("66");
		user.setUserName("521");
		user.setUserPassword("123");
		int insert = mapper.insert(user);
	    Assert.assertTrue(insert==1);
	    System.out.println(user.getId());
		session.close();
	}
	/**
	 * 插入数据
	 */
	@Test
	public void testInsert1(){
		SqlSession session =sql.openSession();
		SysUserMapper mapper = session.getMapper(SysUserMapper.class);
		SysUser user = new SysUser();
		user.setCreateTime(new Date());
		user.setHeadImg(new byte[]{1,2});
		user.setUserEmail("[email protected]");
		user.setUserInfo("66");
		user.setUserName("521");
		user.setUserPassword("123");
		int insert = mapper.insert1(user);
	    Assert.assertTrue(insert==1);
	    System.out.println(user.getId());
	    session.commit();
		session.close();
	}
	/**
	 * 删除
	 */
	@Test
	public void testDelete(){
		SqlSession openSession = sql.openSession();
		//MapperRegistry mapperRegistry = new MapperRegistry(this); 初始化时放入concurrentHashmap,然后get
		SysUserMapper mapper = openSession.getMapper(SysUserMapper.class);
		int deleteById = mapper.deleteById(5);
		openSession.commit();
		openSession.close();
	}
	/**
	 * 更新
	 * 不要按照自己的意愿来写,
	 */
	@Test
	public void testUpdate(){
		SqlSession openSession = sql.openSession();
		SysUserMapper mapper = openSession.getMapper(SysUserMapper.class);
		SysUser selectById = mapper.selectById(1);
		selectById.setHeadImg(new byte[]{5,6,7});
		mapper.updateById(selectById);
		openSession.commit();
		openSession.close();
	}
}
上一篇文章  maven 配置 myBatis实例

猜你喜欢

转载自blog.csdn.net/yl_hahha/article/details/80296327