接口创建
我们一般实际开发中,Dao层都有接口类,然后实现接口类以创建后续的操作,那么我们框架技术一样,可以通过接口实现
UserDao
import java.util.List;
import domain.User;
import domain.UserVO;
public interface UserDao {
public User findById(int id);
public void add(User user);
public void DeleteById(int id);
public void updateUser(User user);
public List<User> findAll();
public List<String> findUsername();
public UserVO findUserIdandGarde();
}
User1Mapper.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="dao.UserDao">
<!-- id就是这个查询语句的标识符,以便于区分其余方法
查询结果直接封装为我们resultType指定的对象
-->
<resultMap type="domain.User" id="UserMap">
<result property="username" column="name"/>
</resultMap>
<select id="findById" parameterType="int" resultType="domain.User">
select * from tb_user where id=#{id} <!-- 对于基本类型,可以任意写,不影响结果 -->
</select>
<!-- ognl表达式后面输入的是类中的属性名 -->
<insert id="add" parameterType="domain.User">
insert into tb_user(id,password,username) values (#{id},#{password},#{username})
</insert>
<delete id="DeleteById" parameterType="int">
delete from tb_user where id=#{id}
</delete>
<update id="updateUser" parameterType="domain.User">
update tb_user set username=#{username},password=#{password} where id=#{id}
</update>
<select id="findAll" resultMap="UserMap">
select username name,password,id from tb_user
</select>
<select id="findUsername" resultType="String">
select username from tb_user
</select>
<select id="findUserIdandGarde" resultType="domain.UserVO">
select id,garde from tb_user u,tb_garde g where u.username=g.username
</select>
</mapper>
- 这里我们需要注意以下几点
- namespace:必须和接口的类对应,也就是必须是类所在层次
- 方法的ID名,必须是我们接口中的方法名,否则后期无法使用
- 然后其中涉及的VO类,后面讲解
text02
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import dao.UserDao;
import domain.User;
import domain.UserVO;
public class Text02 {
public static void main(String[] args) {
String resource="MybatisMainCof.xml";
InputStream is=Text01.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is); //通过配置文件获取链接工厂
SqlSession sqlSession=sessionFactory.openSession(); //获取链接
/*
* 通过getMapper得到代理类
*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
User user=userDao.findById(2);
System.out.println(user);*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
User user=new User("100","zhangsan","123");
userDao.add(user);;*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
User user=new User("100","zhangsan","123456");
userDao.updateUser(user);*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
userDao.DeleteById(100);*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
List<User> result=userDao.findAll();
System.out.println(result);*/
/*UserDao userDao=sqlSession.getMapper(UserDao.class);
List<String> result=userDao.findUsername();
System.out.println(result);
*/
UserDao userDao=sqlSession.getMapper(UserDao.class);
UserVO userVO=userDao.findUserIdandGarde();
System.out.println(userVO);
sqlSession.commit();
sqlSession.close();
}
}
- 这里的前期操作和前面介绍一样,都是先获取到链接
- 然后这里我们需要注意了,UserDao因为是一个接口,所以我们需要实体类在接受,然而这个类怎么获取呢?这就是这里的关键
- 我们通过getMapper(接口类.class)来获取
- 然后剩下的操作就很简单了,就直接对象名.方法名
连表查询
userVO
public class UserVO {
private int id;
private int garde;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGarde() {
return garde;
}
public void setGarde(int garde) {
this.garde = garde;
}
public UserVO(int id, int garde) {
super();
this.id = id;
this.garde = garde;
}
public UserVO() {
super();
}
@Override
public String toString() {
return "UserVO [id=" + id + ", garde=" + garde + "]";
}
}
- 这里的VO类,就是跨越了两个表的属性进行查询的
- 方法定义里面,的sql语句都很简单,就是最简单的定义,这里就只需要主要定义
总结
- 本篇主要介绍的是通过接口创建框架
- 后续会继续介绍讲属性提出到配置文件
- 以及sql中的一对多、多对多的关系
- 这里我们还需要注意一些细节:
- 1.我们获取参数值,有两个办法,EL表达式 Ognl表达式
- 2.我们只有通过EL表达式获取的才是预处理,而Ognl获取的参数是直接拼接,这里实际应用需要注意
- 3.如果是基本参数类型,我们获取的时候不一样要对应属性名,可以随意写,只是为了不出错,最好还是用属性名
- 4.如果是对象的参数,那就必须是对应对象中的 参数了