MyBatis 环境搭建及小试

听说公司很多开发框架都是基于SpringMVC+MyBatis来开发,也是时候学习这个了,为后面出来工作加快融进开发环境做铺垫。这里初始下MyBatis,前面又说到SpringMVC的,后面再将两者结合起来。

MyBatis的今生前世这里就不多说,直接说说怎么搭建,以及最基本的CURD操作。

先下载MyBatis的jar包,MyBatis的核心包就一个,我这里用的是这个mybatis-3.2.8.jar,如果跟spring结合的话还有一个jar包,这个后面再说。导进jar包这个就不用说了,然后再配上log4j.properties,当然相关的jar也要记得导进去才行。

MyBatis的核心配置文件

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

  <!-- 这里写的是类的别名,type指明的是具体的类位置,alias指明类的别名,
  		别名是为了在sql的映射文件中方便书写类名
   -->
  <typeAliases>
	<typeAlias type="lxs.pojo.User" alias="user"/>
  </typeAliases>
  
  <!-- 这里配置的是数据库源的信息 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
      </transactionManager>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/jikebook"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>

  <!-- sql映射文件 -->
  <mappers>
	    <mapper resource="lxs/map/user.xml"/>
  </mappers>
  

</configuration>

MyBatis推崇的是一种sql与代码相分离的思想,也就是sql都会写在xml文件中,然后代码在根据sql的id去调用执行数据库操作,这个有点像hibernate的命名查询getNamedQuery()。

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="/">
   <!--id标识sql,parameterType指传入的参数类型,resultType指返回的参数类型,#{id}指变量值-->
  <select id="findById"  parameterType="int"  resultType="user">
  	  select * from User where id=#{id}
  </select>
  <!-- keyProperty通常跟useGeneratedKeys在一起,表明id自增长-->
  <insert id="addUser" parameterType="user" statementType="PREPARED" keyProperty="id" useGeneratedKeys="true">
  	<!-- insert into user (userName,password) values (#{userName},#{password}) -->
  	insert into User
		(userName,password) values
		(#{userName},#{password})
  </insert>
  
  <update id="updateUser" parameterType="user">
  	update User set userName=#{userName},password=#{password} where id=#{id}
  </update>
  <!-- parameterType="hashmap"表明传入的参数是一个hashmap,也是键值对的形式传入-->
  <select id="loginSelect" resultType="user" parameterType="hashmap">
		select * from User where userName=#{userName} and password=#{password}
  </select>
  <!--返回的是一个List<User>集合-->
  <select id="selectUserList" resultType="user">
  	select * from User
  </select>
  <!--自定义一个返回类型,解决联合sql查询再进行对象封装-->
  <resultMap id="UserMap" type="User"> 
	<id property="id" column="id" /> 
	<result property="userName" column="userName"/> 
	<result property="password" column="password"/> 
  </resultMap>	                                     													    <select id="selectUserMap" resultMap="UserMap">
      select * from User
   </select>
   
   <select id="deleteUser" parameterType="int">
	delete from User where id=#{id}	
   </select>
	


</mapper>


这里补充下resultMap的用法,像上面id=selectUserMap的select,返回的是resultMap=UserMap,刚开始感觉直接返回resultType=User不就行了吗,干嘛还要多次一举。原来resultMap是为了解决当pojo与表字段不一致的使用,因为如果一致的话,select查询得到的字段值是会自动封装进pojo对象,但此时如果pojo属性不一致,那么set方法可能就会不一样,那么封装就会出错,所以需要resultMap来统一。


测试类

public class TestHello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String resource = "lxs/map/MyBatisConfig.xml";
		Reader reader = null;
		SqlSession session;
		try {
			reader = Resources.getResourceAsReader(resource);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder()
				.build(reader);
		session = sqlMapper.openSession();
		/*User temp = session.selectOne("findById", 4);
		System.out.println(temp.getUserName());*/
		/*User user=new User();
		user.setUserName("lxiaosg");
		user.setPassword("123456");
		session.insert("addUser", user);*/
		/*User user=new User();
		user.setId(1);
		user.setUserName("like");
		user.setPassword("123456");
		session.update("updateUser", user);*/
		/*HashMap<String,String> hm=new HashMap();
		hm.put("userName", "like");
		hm.put("password","123456");
		User temp=session.selectOne("loginSelect",hm);
		if(temp!=null)
		{
			System.out.println(temp.toString());
			System.out.println("登陆成功!");
		}*/
		
		/*List<User> ap=session.selectList("selectUserList");
		for(int i=0;i<ap.size();i++){
			System.out.println(ap.get(i).toString());
		}*/
		/*List<User> ap=session.selectList("selectUsers");
		for(JiKeUser temp:ap) {
			System.out.println("用户名="+temp.getUserName()); 
		}*/
		//session.delete("deleteUser", new Integer(1));
		
		List<User> ap=session.selectList("selectUserMap");
		for(User temp:ap) {
			System.out.println("用户名="+temp.getUserName()); 
		}
		session.commit();
		session.close();
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值