Mybatis学习-day01基础入门

0Mybatis介绍

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

 Mybatis通过XML或注解的方式将要执行的statement(statement、preparedstatement、callableStatement)配置起来,通过Java对象和statement中的sql语句映射生成最终要执行的sql语句,最后由Mybatis框架执行sql并将结果映射成java对象返回

Mybatis的2个主要配置文件:SqlMapconfig.xml     mapper.xml

       SqlMapconfig.xml是mybatis的全局配置文件,配置了mybatis的运行环境等信息

       mapper.xml sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapconfig.xml文件中加载进来

1 mybatis使用步骤

   1.1 导入jar包  mybatis  jar    mybatis-3.2.7

         相关依赖包    asm-3.3.1

                               cglib-2.2.2

                               commons-logging-1.1.1

                              javassist-3.17.1-GA

                              log4j-1.2.17

                              slf4j-log4j12-1.7.5

2 配置sql语句映射文件

<?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="user">
    <!-- id是sql语句的id   
         parameterType sql语句中参数的类型
         resultType 查询结果的类型
    -->
	<select id="getUserById" parameterType="int" resultType="entity.User">
		SELECT id,username,sex,birthday,address
		FROM
        `user`  
		WHERE id=#{id}
	</select>

	<!-- 根据姓名模糊查询 -->
	<select id="getUserByName" parameterType="string" resultType="entity.User">
		SELECT id,username,sex,birthday,address
		FROM
		`user`
		WHERE username LIKE '%${value}%'
	</select>
</mapper>

$和#的区别

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。#{}可以接收简单类型或pojo属性值。如果parameterType传输单个简单类型值,#{}中可以是value或其他类型

${}表示拼接sql串,通过${}可以将parameterType中传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型或pojo属性值。如果parameterType传输单个简单类型值,${}中只能是value

3 在congfig中导入SqlMapConfig.xml配置文件,此配置文件有2个作用

       a  配置数据库相关设置

       b  引入sql语句的映射配置文件

<?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整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载sql映射文件 -->
	<mappers>
		<mapper resource="sqlmap/User.xml"/>
	</mappers>
</configuration>

4  写MybatisUtil工具类,来获得SqlSessionFactory

package util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
	
	 private static SqlSessionFactory sqlSessionFactory;
	 static{
		 
		 //创建核心配置文件的输入流
		 InputStream inputStream;
		try {
			SqlSessionFactoryBuilder ssbf=new SqlSessionFactoryBuilder();
			inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			//通过输入流创建SqlSessionFactory
			 sqlSessionFactory= ssbf.build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
	 }
	 
	 public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
}

5 写Test测试文件

   

package test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import util.MybatisUtil;
import entity.User;
public class MybatisTest {
	//根据id查询
	@Test
	public void testGetUserById() throws Exception{
		  SqlSessionFactory factory= MybatisUtil.getSqlSessionFactory();
		   SqlSession sqlSession=factory.openSession();
		   //执行查询,第一个参数:映射的sql id,第二个参数:要执行的sql语句里的参数
		   User user=sqlSession.selectOne("user.getUserById", 1);
		   System.out.println(user);
		   sqlSession.close();
	}
	
	
	//根据姓名模糊查询
	@Test
	public void testGetUserByName() throws Exception{
		
		  SqlSessionFactory factory= MybatisUtil.getSqlSessionFactory();
		   SqlSession sqlSession=factory.openSession();
		   //执行查询,第一个参数:映射的sql id,第二个参数:要执行的sql语句里的参数
		  List<User> userList=sqlSession.selectList("user.getUserByName", "aa");
		  for(User user:userList){
			  System.out.println(user);
		  }
		  //关闭sqlSession
		   sqlSession.close();
	}
	
}

进行数据的增删改时要记得提交事务,否则数据不会改变

猜你喜欢

转载自blog.csdn.net/liyunfei456/article/details/88698065