mybatis使用

pom.xml

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.7</version>
	</dependency>
    
    <!-- 加入mysql驱动依赖包 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.35</version>
	</dependency>
	
	<!-- 加入slf4j依赖包 -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.7.12</version>
	</dependency>
	
    
  </dependencies>

log4j.properties

# Global logging configuration
#在开发环境下设置成DEBUG,生产环境下设置INFO或ERROR
log4j.rootLogger=DEBUG, 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>
  <environments default="development">
    <environment id="development">
      <!-- 使用jdbc事务管理,由mybatis管理 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/lee_test?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper resource="sqlmap/User.xml"/>
  </mappers>
</configuration>

User.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进行分类化管理,理解sql隔离 
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">
	
	<!-- 在 映射文件中配置很多sql语句 -->
	<!-- 需求:通过id查询用户表的记录 -->
	<!-- 通过 select执行数据库查询
	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="com.leech.mybatis.first.pojo.User">
		SELECT * FROM USER WHERE id=#{id}
	</select>
	
	<!-- 根据用户名称模糊查询用户信息,可能返回多条
	resultType:指定就是单条记录所映射的java对象 类型
	${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
	使用${}拼接sql,引起 sql注入
	${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value
	 -->
	<select id="findUserByName" parameterType="java.lang.String" resultType="com.leech.mybatis.first.pojo.User">
		<!-- 
		SELECT * FROM USER WHERE username like "%"#{username}"%"
		 -->
		SELECT * FROM USER WHERE username like'%${value}%'
	</select>
	
	<!-- 添加用户 
	parameterType:指定输入 参数类型是pojo(包括 用户信息)
	#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值
	-->
	<insert id="insertUser" parameterType="com.leech.mybatis.first.pojo.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(username, birthday, sex, address) 
		values(#{username}, #{birthday}, #{sex}, #{address})
		
		<!-- 
		使用mysql的uuid()生成主键
		执行过程:
		首先通过uuid()得到主键,将主键设置到user对象的id属性中
		其次在insert执行时,从user对象中取出id属性值
		 -->
		<!-- 
		<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">
			SELECT UUID()
		</selectKey>
		insert into user(id, username, birthday, sex, address) 
		values(#{id},#{username}, #{birthday}, #{sex}, #{address})
		 -->
	</insert>
	
	<delete id="deleteUser" parameterType="java.lang.Integer">
		delete from user where id=#{id}
	</delete>
	
	<update id="updateUser" parameterType="com.leech.mybatis.first.pojo.User">
		update user 
		set username = #{username},
			birthday = #{birthday},
			sex = #{sex},
			address = #{address}
		where id = #{id}
	</update>
</mapper>

MyBatisTest.java

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.leech.mybatis.first.pojo.User;

public class MyBatisTest {
	private SqlSession sqlSession = null;

	@Before
	public void setUp() throws Exception {
		//String resource = "mybatis-config.xml"; 
		String resource = "SqlMapConfig.xml"; 
		InputStream in = Resources.getResourceAsStream(resource);  
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		sqlSession = factory.openSession();
	}

	@After
	public void tearDown() throws Exception {
		sqlSession.close();
	}

	@Test
	public void testFindUserById() {
		User user = sqlSession.selectOne("test.findUserById", 1);
		System.out.println(user);
		
		//释放资源
		//sqlSession.close();
	}

	@Test
	public void testFindUserByName() {
		List<User> users = sqlSession.selectList("test.findUserByName", "小明");
		System.out.println(users);
	}
	
	@Test
	public void testInsertUser() {
		User user = new User();
		//user.setId(27);
		user.setUsername("测试用户");
		user.setBirthday(new Date());
		user.setSex("男");
		user.setAddress("湖南");
		int flag = sqlSession.insert("test.insertUser", user);
		
		//要执行提交
		sqlSession.commit();
		System.out.println(flag);
	}
	
	@Test
	public void testDeleteUser() {
		int flag = sqlSession.delete("test.deleteUser", 30);
		
		//要执行提交
		sqlSession.commit();
		System.out.println(flag);
	}
	
	@Test
	public void testUpdateUser() {
		User user = sqlSession.selectOne("test.findUserById", 29);
		user.setUsername("测试用户29");
		user.setBirthday(new Date());
		user.setSex("2");
		
		int flag = sqlSession.insert("test.updateUser", user);
		
		//要执行提交
		sqlSession.commit();
		System.out.println(flag);
	}
}



你可能感兴趣的:(mybatis使用)