Mybatis学习总结(一)---快速搭建框架实现增删改查

Mybatis基础

mybatis是apache下的顶级项目

让程序主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要的sql语句

mybatis可以向prepareStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

 

 

 

框架搭建步骤

工程目录结构:

数据库表属性:

一、导入jar依赖:mysql驱动包+mybatis包

 

二、创建log4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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

三、配置SqlMapConfig.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>
	<!-- 和spring整合后enviroment配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用JDBC事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC"/>
			<!-- 数据库连接池 ,由mybatis管理-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>

</configuration>

四、创建pojo类

package cn.mybatis.model;

public class User {
    private Integer id;

    private String username;

    private String password;

    private Integer age;

    private Integer deptid;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getDeptid() {
        return deptid;
    }

    public void setDeptid(Integer deptid) {
        this.deptid = deptid;
    }

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", age=" + age + ", deptid=" + deptid + "]";
	}
    
    
}

 

五、创建映射文件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="cn.mybatis.dao.UserMapper" >
 
  
  <!-- 在mapper中配置很多sql语句 -->
  <!-- id:标志映射文件中的sql
     将sql语句封装到mappedStatement对象中,所以id称为statement的id -->
  <!-- parameterType绑定输入参数类型,这里指定int型 -->
  <!-- #{}表示占位符 -->
  <!-- #{id}其中id表示接收输入的参数,参数名称就是id,如果输入参数为简单类型,#{}中参数名可以任意,可以是value或其他 -->
  <!-- resultType指定sql的输出结果所映射的java对象类型,select指定resultType表示单条记录映射成的java对象 -->
  
  <select id="findUserById" parameterType="int" resultType="User">
  	select * from user where id = #{value}
  </select>
  
  <!--   根据用户名模糊查询用户信息,可能返回多条 -->
  <!-- resultType:指定单条记录映射成的java对象类型 -->
  <!-- ${}表示拼接sql串,将接收到的参数内容不加任何修饰,拼接在sql中 -->
  <!-- 使用${}拼接sql,容易引起sql注入,不安全 -->
  <!-- ${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value -->
  <select id="findUserByName" parameterType="java.lang.String" resultType="cn.mybatis.model.User">
		select * from user where username like '%${value}%'
  </select>
  
 <!--  添加用户
  parameterType:指定输入参数类型是pojo
  #{}中指定pojo属性名,接收到pojo的属性值,mybatis通过OGNL获得对象的属性值 -->
  <insert id="insertUser" parameterType="cn.mybatis.model.User">
  
  <!-- 将插入数据的主键返回,返回到user对象中
  		SELECT LAST_INSERT_ID:得到刚insert进去记录的主键值,只适用于自增主键
   		keyProperty:将查询到的主键值设置到parameterType指定对象的哪个属性
   		order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
   		resultType:指定SELECT LAST_INSERT_ID()的结果类型
   -->
  <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  	SELECT LAST_INSERT_ID()
  </selectKey>
  	insert into user(id,username,password,age) value(#{id},#{username},#{password},#{age})
  </insert>
  
  
  <!--  删除用户 -->
   <delete id="deleteUser" parameterType="java.lang.Integer">
   	delete from user where id = #{id}
   </delete>
   
 <!--   更新用户
 	需要传入用户的id
 	需要传入用户的更新信息
 	parameterType指定对象必须包含id否则更新全表
 	#{id}:从输入的user对象中获得id属性
  -->
   <update id="updateUser" parameterType="cn.mybatis.model.User">
   	update user set username = #{username},password = #{password},age = #{age}
   	where id = #{id}
   </update>
  
</mapper>

六、在SqlMapConfig.xml<configuration>标签中添加以下代码,加载映射文件

	<!-- 加载映射文件 -->
	<mappers>
		<mapper resource="mapper/UserMapper.xml"/>
	</mappers>

七、创建JUnit测试类

package cn.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 cn.mybatis.dao.UserMapper;
import cn.mybatis.model.User;


public class Test {

	
	
//	根据id查询用户
	@org.junit.Test
	public void testFindUserById() throws IOException {

//		mybatis配置文件
		String resource = "SqlMapConfig.xml";
//		得到配置文件流
		InputStream inputStream =  Resources.getResourceAsStream(resource);
//		创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		通过会话工程获得SqlSession
		SqlSession sqlSession =  sqlSessionFactory.openSession();
//		通过SqlSession操作数据库
//		第一个参数:映射文件中statement的id,等于命名空间+“.”+statement的id
//		第二个参数:制定映射文件中所匹配的parameterType类型的参数
//		sqlSession.selectOne结果与映射文件中所匹配的resultType类型的对象
//		selectOne查询出一条记录
		User user = sqlSession.selectOne("cn.mybatis.dao.UserMapper.findUserById", 1);
		
		System.out.println(user.toString());
	
//			释放资源
			sqlSession.close();	
	}
	
	
	
//	根据用户名模糊查询用户
	@org.junit.Test
	public void testFindUserByName() throws IOException {

//		mybatis配置文件
		String resource = "SqlMapConfig.xml";
//		得到配置文件流
		InputStream inputStream =  Resources.getResourceAsStream(resource);
//		创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		通过会话工程获得SqlSession
		SqlSession sqlSession =  sqlSessionFactory.openSession();
//		通过SqlSession操作数据库
		
		//list中User和映射文件中resultType所指定的类型一致
		List<User> list = sqlSession.selectList("cn.mybatis.dao.UserMapper.findUserByName","dd");
		
		System.out.println(list+","+list.size());
		
		sqlSession.close();
	}
	
//	新增用户
	@org.junit.Test
	public void testInsertUser() throws IOException {

//		mybatis配置文件
		String resource = "SqlMapConfig.xml";
//		得到配置文件流
		InputStream inputStream =  Resources.getResourceAsStream(resource);
//		创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		通过会话工程获得SqlSession
		SqlSession sqlSession =  sqlSessionFactory.openSession();
//		通过SqlSession操作数据库
		
		User user = new User();
		user.setUsername("小胡");
		user.setPassword("123456");
		user.setAge(21);
		user.setDeptid(1);
		
		sqlSession.insert("cn.mybatis.dao.UserMapper.insertUser",user);
		
//		提交事务
		sqlSession.commit();
		
		System.out.println(user.getId());
//		关闭会话
		sqlSession.close();
		
	}
	
//	根据id删除用户信息
	@org.junit.Test
	public void testdeleteUser() throws IOException {

//		mybatis配置文件
		String resource = "SqlMapConfig.xml";
//		得到配置文件流
		InputStream inputStream =  Resources.getResourceAsStream(resource);
//		创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		通过会话工程获得SqlSession
		SqlSession sqlSession =  sqlSessionFactory.openSession();
//		通过SqlSession操作数据库
		
		sqlSession.delete("cn.mybatis.dao.UserMapper.deleteUser",14);
		
//		提交事务
		sqlSession.commit();
		
//		关闭会话
		sqlSession.close();	
	}
	
	
//	更新用户
	@org.junit.Test
	public void updateUser() throws IOException {
		
//		mybatis配置文件
		String resource = "SqlMapConfig.xml";
//		得到配置文件流
		InputStream inputStream =  Resources.getResourceAsStream(resource);
//		创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//		通过会话工程获得SqlSession
		SqlSession sqlSession =  sqlSessionFactory.openSession();
//		通过SqlSession操作数据库
		
		User user = new User();
		user.setId(13);
		user.setUsername("aKuang");
		user.setPassword("123456");
		user.setAge(22);
		user.setDeptid(1);
	
		sqlSession.update("cn.mybatis.dao.UserMapper.updateUser",user);
		
//		提交事务
		sqlSession.commit();
		
//		关闭会话
		sqlSession.close();	
		
	}
	

	
}

 

属性总结:

parameterType

在映射文件中通过parameterType指定输入参数的类型

resultType

在映射文件中通过resultType指定输出结果的类型

#{}

表示一个占位符号

${}表示一个拼接符号,会引起sql注入,所以不建议使用${}

selectOne

表示查询出一条记录进行映射,如果使用selectOne可以实现,则使用selectList

也可以实现(list中只有一个对象)。

selectList

表示查询出一个列表(多条记录)进行映射,如果使用selectList

查询多条记录,不可以使用selectOne

自增主键返回主键见代码中

 

 

下一篇Mybatis Dao开发:https://blog.csdn.net/aKuang_JH/article/details/82683473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值