SSM框架---MyBatis的简单示例(二)

一、MyBatis核心jar包:

二、核心配置文件sqlMapConfig.xml

注:配置文件的所有内容包括文件本身,在进行spring整合后都已废除。

<?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>

	<!-- 引入数据源配置文件jdbc.properties-->
	<properties resource="jdbc.properties">
		<property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
    	<property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl?characterEncoding=utf-8"/>
    	<property name="jdbc.username" value="ly1"/>
		<property name="jdbc.password" value="ly1"/>
	</properties>

	<!-- 和spring整合后 environments配置将废除-->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理-->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载映射文件-->
	<mappers>
		<mapper resource="UserMapper.xml"/>
	</mappers>
	
</configuration>

 解决了JDBC本身的缺陷:

1、涉及到重复创建链接和释放链接,造成资源浪费。解决方式:使用连接池 ------> 使用了数据库连接池
2、出现硬编码。体现在:数据库驱动,url、用户名密码、sql。解决方式:使用配置文件 ------> 引入数据源配置文件jdbc.properties
3、结果获取不方便。解决方式:把结果放到一个POJO中 ------> 实现

三、配置sql映射文件xxxMapper.xml

创建对应的POJO和映射文件PojoMapper.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="test1">
   <select id="findUserById" parameterType="int" resultType="com.ly.mybatis.pojo.User"  >
    select * from t_user where id = #{id}
   </select>
   
   <select id="findUserByUsername" parameterType="string" resultType="com.ly.mybatis.pojo.User">
   	select * from t_user where username like '%${value}%'
   </select>
   
   <insert id="insertUser" parameterType="com.ly.mybatis.pojo.User">
   	<!--insert into t_user(id,USERNAME,BIRTHDAY,SEX,ADDRESS) values(#{id},#{username},sysdate,#{sex},#{address})-->
    insert into t_user(id,USERNAME,BIRTHDAY,SEX,ADDRESS) values(#{id},#{username},#{birthday},#{sex},#{address})
   </insert>
    
   <update id="updateUser" parameterType="com.ly.mybatis.pojo.User">
    update t_user set birthday=#{birthday},address=#{address} where id = #{id}  
   </update>
   
   <delete id="deleteUserById" parameterType="int">
   	delete from t_user where id = #{id}
   </delete>
</mapper>
  • namespace 命名空间,用于隔离sql语句
  • #{}:占位符:如果传入的是字符串,预编译时会自动带上单引号;
  • ${}:连接符:如果传入的是基础数据类型,也就是string,long,double,int,boolean,float等     大括号只能写value,即${value};    
  •                    如果传入的是pojo或者map类型,                       大括号只能写属性名或key名,即${username};

    能使用#{}的时候尽量使用#{},不使用${};                   ${}用的很少,也就模糊查询
    #{}相当于jdbc中的preparedstatement(预编译),${}是直接使用里面的值进行拼接,有可能会有SQL注入问题

四、JUnit测试

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.UUID;

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.Before;
import org.junit.Test;

import com.ly.mybatis.pojo.User;

public class UserTest {
	SqlSessionFactory sqlSessionFactory = null;
	
	@Before
	public void init() throws IOException {
		//1、创建sqlSessionFactory工厂
		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new  SqlSessionFactoryBuilder();
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
	}
	@Test
	public void testFindUserById() throws IOException {
		//2、开启sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//3、使用sqlSession方法
		User user = sqlSession.selectOne("findUserById", 10);
		System.out.println("结果:"+user);
		//4、关闭sqlSession
		sqlSession.close();
	}
	
	@Test
	public void testfindUserByUsername() throws IOException {
		//2、开启sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//3、使用sqlSession方法
		List<User> list = sqlSession.selectList("findUserByUsername", "张");
		System.out.println("结果2:"+list);
		//4、关闭sqlSession
		sqlSession.close();
	}
	
	@Test
	public void testInsertUser() throws IOException {
		//2、开启sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//3、使用sqlSession方法
		User user = new User();
		System.out.println("结果3--UUID测试:"+UUID.randomUUID().toString());
		user.setId(2);
		user.setUsername("yanyan");
		user.setBirthday(new Date());
		user.setSex("2");
		user.setAddress("永杰北路");
		sqlSession.insert("insertUser", user);
		sqlSession.commit();//不要忘了提交
		//4、关闭sqlSession
		sqlSession.close();
	}
	
	
	@Test
	public void testUpdateUser() throws IOException {
		//2、开启sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//3、使用sqlSession方法
		User user = new User();
		user.setId(2);
		user.setBirthday(new Date());
		user.setAddress("永杰北路2222444");
	    sqlSession.update("updateUser", user);
		sqlSession.commit();//不要忘了提交
		System.out.println("结果4--");
		//4、关闭sqlSession
		sqlSession.close();
	}
	
	@Test
	public void testDeleteUserById() throws IOException {
		//2、开启sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//3、使用sqlSession方法
	    sqlSession.delete("deleteUserById", 2);
		sqlSession.commit();//不要忘了提交
		System.out.println("结果5--");
		//4、关闭sqlSession
		sqlSession.close();
	}

}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值