一、MyBatis基础操作
(1)不带返回值添加、更新、删除
不带返回值的添加、更新、删除非常的简单。
user.xml中配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd
">
<mapper namespace="User">
<insert id="add" parameterType="User">
insert into t_user(username,password) values(#{username},#{password})
</insert>
<update id="updateById" parameterType="User">
update t_user set username=#{username},password=#{password} where id=#{id}
</update>
<delete id="deleteById" parameterType="User">
delete from t_user where id=#{id}
</delete>
UserDao.java中代码如下:
//打开连接
sqlSession=sqlSessionFactory.openSession();
//SQL操作开始 ——————————
//添加
sqlSession.insert("add", user);
//更新
sqlSession.update("User.updateById", user);
//删除
sqlSession.delete("User.deleteById", id);
//SQL操作结束
//提交数据库更新
sqlSession.commit();
//关闭连接
sqlSession.close();
当user.xml中的id不重复时,可以直接通过id进行调用,如果出现重复,需要按照“namespace.id”的格式调用
(2)查询单条记录
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User">
<select id="getById" parameterType="User" resultType="User">
select * from t_user where id=#{id} and 1=1
</select>
</mapper>
UserDao.java部分代码如下所示:
sqlSession=sqlSessionFactory.openSession();
//查询单条记录
user=(User)sqlSession.selectOne("User.getById",id);
sqlSession.commit();
sqlSession.close();
(3)查询返回List集合
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<select id="getAllUser" resultType="User">
select * from t_user
</select>
</mapper>
UserDao.java部分代码如下所示:
List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
//获取List集合
users=sqlSession.selectList("User.getAllUser");
sqlSession.commit();
sqlSession.close();
注意,这里的List的命名空间是java.util.List。
(4)查询返回自定义集合
有时候,我们不希望返回所有的集合,而是返回我们需要的数据,这时候,就可以对返回的数据进行自定义。
自定义返回的集合使用<resultMap>标签,如下所示:
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
</resultMap>
然后通过resultMap="resultListUser"指定返回自定义的数据集合。
注意,resultMap和resultType不能同时存在。
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<select id="getCustomAllUser" resultMap="resultListUser">
select * from t_user
</select>
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
</resultMap>
</mapper>
UserDao.java部分代码如下所示:
List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.getCustomAllUser");
sqlSession.commit();
sqlSession.close();
(5)插入后返回主键
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="Id" parameterType="User">
insert into t_user(username,password) values(#{username},#{password})
</insert>
</mapper>
在这里,useGeneratedKeys="true"表示使用主键自动生成,keyProperty="Id"表示主键的名称为“Id”。
UserDao.java部分代码如下所示:
int id=0;
sqlSession=sqlSessionFactory.openSession();
//插入后返回主键
sqlSession.insert("User.insertAndGetId", user);
sqlSession.commit();
sqlSession.close();
id= user.getId();
友情提示:添加、更新、删除默认的返回值都是受影响的行数。
(6)聚合查询
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<select id="countAll" parameterType="User" resultType="int">
select count(*) from t_user
</select>
</mapper>
UserDao.java部分代码如下所示:
int count=0;
sqlSession=sqlSessionFactory.openSession();
//聚合查询
count = Integer.parseInt(String.valueOf(sqlSession.selectOne("User.countAll")));
sqlSession.commit();
sqlSession.close();
(7)调用存储过程
略。
(8)多个参数值问题
在上面的例子中,我们曾经使用User实体来作为多个参数的传入载体。
在Mybatis中,传递多个参数有两种方式:Map对象和Model实体。
本例中,我们采用Map对象来演示:
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<select id="params1" parameterType="map" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>
</mapper>
其中,map是java.util.Map的别名。
UserDao.java部分代码如下所示:
Map<String,Object> map= new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("password","444");
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.params1",map);
sqlSession.commit();
sqlSession.close();
(9)多表查询返回一个结果集
本例中,我们使用t_user表和t_address表。
user.xml部分代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User">
<select id="selecttables" resultMap="User_Address">
select a.*,b.*
from t_user a,t_address b
where a.Id=b.UserId
</select>
<resultMap type="com.uni2uni.www.Model.User_Address" id="User_Address">
<id column="id" property="id" />
<result column="Username" property="Username" />
<result column="Password" property="Password" />
<result column="UserId" property="UserId" />
<result column="Address" property="Address" />
</resultMap>
</mapper>
UserDao.java部分代码如下所示:
SqlSession sqlSession=null;
List<User_Address> models=null;
sqlSession=sqlSessionFactory.openSession();
models=sqlSession.selectList("User.selecttables");
sqlSession.commit();
sqlSession.close();
二、Demo
下载:http://pan.baidu.com/s/1qWwhx6W