mybatis小记


图1
这里是一个简单的mybatis的基本结构。刚接触,从杨哥给我的demo做个笔记吧。
首先是config,这是配置文件。
图2
其中jdbc.properties是一个键值的表,是记录jdbc信息。我用的是oracle数据库,自然也是oracle的jdbc。
图3
而这里的SqlMapConfig.xml,就是利用jdbc的配置文件了吧。下面是代码:
<?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="config/jdbc.properties" />
		<settings>
			<!-- mybaties二级缓存开启 -->
			<setting  name="cacheEnabled" value="true"/>
		</settings>
		
		<typeAliases>
			<!-- 这地方是定义数据类型所在的包。写的时候可以少些pojo -->
			<package name="pojo"/>
		</typeAliases>
		<!-- oracle数据库 -->
	  	 <environments default="development">
				<environment id="development"> 
					<transactionManager type="JDBC" />
					<dataSource type="POOLED">
						<property name="url" value="${url}"/>
						<property name="username" value="${username}"/>
						<property name="password" value="${password}"/>
						<property name="driver" value="${driver}"/>
					</dataSource>
				</environment>
		</environments>
	
	<mappers>

在util包里面的是一个封装类,将sessionfactory封装起来,getsession,使用方便。下面是代码:
<span style="font-size:12px;">package util;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
	private static SqlSessionFactory factory=null; 
	static {
		InputStream in=null;
		try{
			in = Resources.getResourceAsStream("config/SqlMapConfig.xml");
			factory = new SqlSessionFactoryBuilder().build(in);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSession(){
		return factory.openSession();
	}
	
	public static void closeSession(SqlSession session){
		if(session !=null) session.close();
	}

}
</span>

使用上面的util包里面封装的方法,可以省去很多步骤。下面是需要导入的一些jar包。
其中,junit是测试,mybatis是本次的重点,log4j是日志包。咳咳,据说是这样的。
这样一来,准备工作也就完成了。
下来就是根据数据库的表格,创建自定义的类型了。
用的user表,其中三个字段,username,password,id。
然后就是pojo包中的user类了:
<span style="font-size:12px;">package pojo;

import java.io.Serializable;
import java.util.List;

public class User implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int id;
	private String userName;
	private String passWords;
	private List<Integer> ids;
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWords() {
		return passWords;
	}

	public void setPassWords(String passWords) {
		this.passWords = passWords;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public List<Integer> getIds() {
		return ids;
	}

	public void setIds(List<Integer> ids) {
		this.ids = ids;
	}

	@Override
	public String toString() {
		return "User [username=" + userName + ", password=" + passWords
				+ ", id=" + id + "]";
	}
}</span>

pojo,也类似于是bean的类已经建完了。
重点所在的mapper包下面东西了。


这里就是userMapper.java 的代码,这里是一个对于数据库操控方法的声明:

package mapper;

import java.util.List;

import pojo.User;

public interface UserMapper {
	/**
	 * 根据id查找
	 * @param id
	 * @return
	 */
	public User selectById(int id);
	

	/*public List<User> selectByNameWor(User user);*/
	public List<User> listByIds(User user);
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public boolean  deleteById(int id);
	/**
	 * 增加
	 * @param user
	 * @return
	 */
	public boolean  insertUser(User user);
	/**
	 * 修改
	 * @param id
	 * @return
	 */
	public boolean  updateById(User user);
	/**
	 * 查找所有
	 * @param name
	 * @return
	 */
	public List<User>  listByName(String name);
	/**
	 * 根据账户和密码查找
	 * @param id
	 * @return
	 */
	public User selectByNameWor(User user);
	
}
下面是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">

<mapper namespace="mapper.UserMapper">
	<cache/>
	 <select id="selectById" parameterType="int" resultType="User" useCache="false">  
        select username ,passwords,id from sysuser u  
             where u.id = #{id}  
     </select>  
    
     <delete id="deleteById" parameterType="int" >  
        delete from sysuser where id = #{id} 
     </delete> 
    
	<insert id="insertUser" parameterType="User">
	   	<selectKey keyProperty="id" order="BEFORE" resultType="int">
			select USER_SEQ.NEXTVAL from dual
    	 </selectKey>
		insert into sysuser (id,username,passwords) 
		values(#{id},#{userName},#{passWords})
	</insert>  
	
	<update id="updateById" parameterType="User">
		update sysuser set username=#{userName} ,passwords=#{passWords}
		 where id=#{id}
	</update> 
	
    <select id="listByName" parameterType="String"  resultType="User">  
        select username,passwords,id from sysuser u  
        where u.passwords like '%${value}%'
              
    </select> 
    
    <select id="listByIds" parameterType="User"  resultType="User">  
        select username,passwords,id from sysuser u  
        <where>
        <!-- (id=1 or id=2 or id=2) -->
       <!--  <if test="ids!=null">
        	<foreach  collection="ids" item="item_id" open="(" close=")" separator="or">
        	id=#{item_id}
        	</foreach>
        </if>  -->
        <!-- id in (2,4,5) -->
         <if test="ids!=null">
        	<foreach  collection="ids" item="item_id" open="id in (" close=")" separator=",">
        	#{item_id}
        	</foreach>
        </if> 
        </where>     
    </select> 
    
    
    <select id="selectByNameWor" parameterType="User" resultType="User">  
        select username ,passwords,id from sysuser u  
            <where>
              <if test="userName!=null and userName!=''">
              	and u.username=#{userName}
              </if>
              <if test="passWords!=null and passWords!=''">
              	and u.passwords=#{passWords}
              </if> 
            </where> 
     </select>  
    
    
    
  
    
    
</mapper>	

上面的xml和java类只是简单的几个方法。
有了这些之后,也就能够进行简单的测试了。
test测试包下面的test类的代码:

package Test;

import java.io.InputStream;
import java.util.ArrayList;
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 pojo.User;
import util.MybatisUtil;
import mapper.UserMapper;

public class Test {
	
	 public static void main(String[] args) {
		    SqlSession session = MybatisUtil.getSession();
			//创建usermapper对象,自动生成mapper代理对象
			UserMapper  userMapper=session.getMapper(UserMapper.class);
			User  user=userMapper.selectById(2);
			
			/*User userf=new User();
			userf.setPassWords("");
			userf.setUserName("李四");
			User  user=userMapper.selectByNameWor(userf);
			/*多个条件
			List<Integer> ids=new ArrayList<Integer>();
			ids.add(3);
			ids.add(4);
			ids.add(5);
			user.setIds(ids);
			List<User> ss=userMapper.listByIds(user);
			System.out.println(ss);*/
			
			List<User> ss = userMapper.listByName("7");
			session.close();
			System.out.println(ss);
	}
	
	
}

出现的结果是:
之所以出现这样的结果,直接能用sysout输出,是因为在user自定义的时候,有一个tostring的方法,可以变成这样的格式。

其中我也遇到了一个问题。
其中如果使用javaEE5.0的话 就可以显示DEBUG的详细信息。
但是如果用的是Java EE 6 ,则不会显示DEBUG的详细信息,只会出现结果:
而不会出现DEBUG的详细信息。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值