mybatis另外两种方法实现crud
mybatis的接口+xml方法
在配置文件中添加映射,
mybatis.xml
<?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节点
里面有配置信息 分别是环境和映射
其中环境里有datasource,里面有我们熟悉的连接数据库的四个字符串
-->
<configuration>
<!--
引入db的配置文件信息,后面用到的四个连接字符串就可以直接使用 ${}的方式来动态引入
-->
<properties resource="db.properties">
</properties>
<!--
给当前mybatis项目添加日志功能,该STDOUT_LOGGING值的好处是不用添加第三方jar包就可以有日志的输出
-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!--<typeAlias type="com.qfedu.pojo.Order" alias="abc" />-->
<package name="com.qfedu.pojo" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pass}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/qfedu/dao/UserMapper.xml"/>
</mappers>
</configuration>
添加接口,
package com.qfedu.dao;
import com.qfedu.pojo.User;
import java.util.List;
public interface IUserDao {
/**
* 查询所有的User对象
* @return User对象的列表
*/
List<User> getAllUsers();
/**
* 新增一个User对象
* @param u 要新增的用户对象
* @return 受影响的行数
*/
int saveUser(User u);
}
映射文件是有特别要求的
- namespace必须是接口的全路径
- 每个节点的id必须是接口的方法名
- 该接口中方法不允许重载,否则namespace+id将不唯一
- 注意该接口中的增删改的方法的返回值,最好使用int
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="com.qfedu.dao.IUserDao">
<!--
ID为接口中的方法名
-->
<select id="getAllUsers" resultType="User">
select * from user
</select>
<insert id="saveUser" >
insert into user values(null, #{username}, #{password}, #{age}, #{addr})
</insert>
<update id="updateUser">
update user set username = #{username}, password =#{password}, age=#{age}, addr = #{addr} where uid = #{uid}
</update>
</mapper>
封装了一个Utils,
Session.java
public class SessionUtils {
private static SqlSession mSession = null;
private static SqlSessionFactory mFactory = null;
static {
try {
mFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SqlSession对象
* @return
*/
public static SqlSession getSession(){
mSession = mFactory.openSession(true);
return mSession;
}
/**
* 关闭SqlSession对象
* @param session 要关闭的SqlSession对象
*/
public static void closeSession(SqlSession session){
if(session != null){
session.close();
session = null;
}
}
}
纯注解方式
添加映射,有两个方法
- 使用标签mapper,
<mapper class="com.qfedu.dao.IUserDao2" />
- 使用标签package,此包下的接口都能被使用
<package name="com.qfedu.dao" />
在接口上直接使用注解,需要注意的是传单个值是,命名可以随便,但当传两个或两个以上的,必须使用param1或arg0开始
public interface IUserDao2 {
@Select("select * from user")
List<User> getAllUsers();
@Select("select * from user where uid = #{fdsa}")
User getUserByUid(int uid);
@Insert("insert into user values(null, #{username}, #{password}, #{age}, #{addr})")
int saveUser(User u);
//@Select("select * from user where username=#{arg0} and password=#{arg1}")
@Select("select * from user where username=#{param1} and password=#{param2}")
User login(String username, String password);
}
可以在传参上添加注解@Param,就可以在传值名称上添加标准名称
@Select("select * from user where username=#{username} and password=#{password}")
User login2(@Param("username") String username, @Param("password") String password);