Mybatis学习总结一——认识Mybatis

一、什么是Mybatis?

    Mybatis是一个优秀的持久层框架,它对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设置参数、结果集检索等 jdbc 繁杂的过程代码。

二、Mybatis架构(重点)

三、Mybatis下载

地址:https://github.com/mybatis/mybatis-3/releases 

四、Mybatis Demo

   1、创建Java Porject 

   2、导入jar包

      

   3、配置mybatis.xml

       在 src 下创建创建 mybatis 核心配置文件 mybatis.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>
	<!-- 
		配置的运行环境  
		default:默认加载的环境
		当mybatis与spring整合后,一下配置将废除
	-->
	<environments default="mysql">
		<environment id="mysql">
			<!-- 事务管理的配置 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 数据源:数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 配置加载的映射文件 -->
	<mappers>
		<mapper resource="UserMapper.xml" />
	</mappers>
</configuration>

  4、创建sql语句

CREATE TABLE `t_message` (
  `msgid` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) NOT NULL,
  `msgtopic` varchar(200) NOT NULL,
  `msgcontents` varchar(1000) NOT NULL,
  `msgtime` varchar(30) NOT NULL,
  `msgip` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`msgid`),
  KEY `FK_gtgh1uogevfltp7c84kpq05eu` (`userid`),
  CONSTRAINT `FK_gtgh1uogevfltp7c84kpq05eu` FOREIGN KEY (`userid`) REFERENCES `t_user` (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8;

5、根据数据库创建pojo,包括get、set、有参无参构造器、toString 方法

6、创建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">
<!-- namespace:命名空间,用于隔离sql的 -->
<mapper namespace="UserMapper">
	<!-- 
		第一个入门mybatis:根据id查询用户信息 
		 id:用于标识映射文件的sql  其实是:statement的id
		 parameterType:输入参数的类型,java基本类型、pojo、map
		 #{}:给占位符设置值,接受参数里的参数信息
		 	 当参数类型为基本类型时,#{}里面的参数可以是任意  或者是#{value}
		 resultType:输出结果类型:java基本类型、pojo、map,只的是单条记录的类型
	-->
	<select id="selectById" parameterType="int" resultType="com.szy.pojo.User">
		select * from user where id = #{id}
	</select>
	
	<!-- 根据姓名模糊查询
		${}:字符串拼接,没有使用占位符,不安全,有SQL注入的风险
		如果参数类型基本类型,则${}里面的参数只能是${value}
	 -->
	<select id="selectByName" parameterType="String" resultType="com.szy.pojo.User">
		select * from user where username like '%${value}%'
	</select>
	
	<!-- 使用?占位符 -->
	<select id="selectByName2" parameterType="String" resultType="com.szy.pojo.User">
		select * from user where username like #{value}
	</select>
	
	<!-- 新增用户 
		参数类型为自定义的pojo对象时,取值方式#{属性名}
		需要返回id时:加keyProperty="主键" useGeneratedKeys="true"
	-->
	<insert id="addUser" parameterType="com.szy.pojo.User" keyProperty="id" useGeneratedKeys="true">
		insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) 
	</insert>
	
	<!-- 修改用户 -->
	<update id="updateUser" parameterType="com.szy.pojo.User">
		update user set username=#{username},address=#{address} where id=#{id}
	</update>
	
	<!-- 删除用户 -->
	<delete id="deleteUser" parameterType="int">
		delete from user where id=#{id}
	</delete>
</mapper>

7、测试

package com.szy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.szy.pojo.User;

public class UserTest {

	private SqlSession sqlSession =null;
	//@Test之前执行
	@Before
	public void init() throws IOException {
		System.err.println("初始化");
		//1.加载mybatis的全局配置文件   io的形式读取
		InputStream in = Resources.getResourceAsStream("mybatis.xml");
		//2.获取回话工厂,读取全局配置文件获取 
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		//3.获取会话,通过回话工厂创建
		sqlSession = sqlSessionFactory.openSession();
	}
	
	@Test
	public void testSelectById() throws IOException{
		
		//4.调用会话的方法,进行查询
		//statement:预处理语句   查询需要执行的SQL语句  命名空间.id
		//parameter:参数
		User user = sqlSession.selectOne("UserMapper.selectById", 116);
		System.err.println(user);
	}
	
	//根据姓名模糊查询
	@Test
	public void testSelectByName(){
		List<User> users = sqlSession.selectList("UserMapper.selectByName", "三");
		for (User user : users) {
			System.err.println(user);
		}
	}
	
	//根据姓名模糊查询
	@Test
	public void testSelectByName2(){
		List<User> users = sqlSession.selectList("UserMapper.selectByName2", "%三%");
		for (User user : users) {
			System.err.println(user);
		}
	}
	
	//新增用户
	@Test
	public void addUser(){
		User user = new User("小王", new Date(), "男", "山东");
		int insert = sqlSession.insert("UserMapper.addUser",user );
		sqlSession.commit();
		System.err.println(insert);
		System.err.println("新增的id"+user.getId());
	}
	
	//修改用户
	@Test
	public void updateUser() {
		User user = new User();
		user.setId(138);
		user.setUsername("小旺旺");
		user.setAddress("上海");
		int update = sqlSession.update("UserMapper.updateUser", user);
		sqlSession.commit();
		System.err.println(update);
	}
	
	//删除用户
	@Test
	public void deleteUser() {
		int delete = sqlSession.delete("UserMapper.deleteUser", 138);
		sqlSession.commit();
		System.err.println(delete);
	}
	
	
	//@Test之后执行
	@After
	public void after() {
		sqlSession.close();//资源释放
		System.err.println("执行完毕");
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值