图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包。
这样一来,准备工作也就完成了。
下来就是根据数据库的表格,创建自定义的类型了。
用的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的方法,可以变成这样的格式。
之所以出现这样的结果,直接能用sysout输出,是因为在user自定义的时候,有一个tostring的方法,可以变成这样的格式。
其中我也遇到了一个问题。
其中如果使用javaEE5.0的话
就可以显示DEBUG的详细信息。
但是如果用的是Java EE 6
,则不会显示DEBUG的详细信息,只会出现结果:
而不会出现DEBUG的详细信息。