步骤:
1、导入相应的jar包
2、在src下导入mybaits的主配置文件(SqlMapConfig.xml)和日志文件(log4j.properties)
3、创建JavaBean(User)和相应的配置文件(User.xml),放在同一个包下
相关代码如下
User.java
package com.caokaiyuan.domain;
public class User
{
private int id;
private String username;
private String sex;
private String address;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
}
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">
<mapper namespace="user">
<!-- 通过id查询 -->
<select id="findById" parameterType="int" resultType="com.caokaiyuan.domain.User">
select * from user where id=#{id}
</select>
<!-- 通过姓名查询 -->
<select id="findByName" parameterType="String" resultType="com.caokaiyuan.domain.User">
select * from user where username like '%${value}%'
</select>
<!-- 添加数据 -->
<insert id="add" parameterType="com.caokaiyuan.domain.User">
insert into user(username,sex,address) values(#{username},#{sex},#{address})
</insert>
<!-- 删除数据 -->
<delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 更新数据 -->
<update id="update" parameterType="com.caokaiyuan.domain.User">
update user set username=#{username},sex=#{sex},address=#{address} where id=#{id}
</update>
</mapper>
注:上面配置文件的namespace随意,建议与相关类的名称相同,id用来唯一标识操作的模块,parameterType为方法的参数类型,resultType为调用掉模块的返回类型
测试类
package com.caokaiyuan.test;
import java.io.IOException;
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.Before;
import org.junit.Test;
import com.caokaiyuan.domain.User;
public class TestClass
{
private SqlSessionFactory sqlSessionFactory;
@Before
public void before()
{
try
{
sqlSessionFactory = new SqlSessionFactoryBuilder().
build(Resources.getResourceAsStream("SqlMapConfig.xml"));
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//通过id查询
@Test
public void findById()
{
SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("user.findById", 5);
System.out.println(user.getAddress());
}
//模糊查询
@Test
public void findByName()
{
SqlSession session = sqlSessionFactory.openSession();
List<User> lists = session.selectList("user.findByName","a");
for (User user : lists)
{
System.out.println(user.getUsername());
}
}
//添加数据
@Test
public void insert()
{
SqlSession session = sqlSessionFactory.openSession();
User user = new User();
user.setAddress("广东");
user.setSex("男");
user.setUsername("test");
session.insert("user.add", user);
session.commit();
}
//删除数据
@Test
public void delete()
{
SqlSession session = sqlSessionFactory.openSession();
session.delete("user.delete", 11);
session.commit();
}
//更新数据
@Test
public void update()
{
SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("user.findById", 5);
user.setUsername("hahahha");
session.update("user.update", user);
session.commit();
}
}
注释
如selectOne("user.findById", 5);方法,第一个参数标识调用User.xml的那个模块,通过namespace和id决定。
parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。
#{}和${}
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
1.1.1.1.1 selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查询一条或多条记录。