Mybatis 注解

   日期:2020-09-11     浏览:93    评论:0    
核心提示:Mybatis 如何使用注解开发

1.1 基本使用

1.1.1 常用注解

注解 描述
@Insert 实现新增
@Update 实现更新
@Delete 实现删除
@Select 实现查询
@Result 实现结果集封装
@Results 可以与 @Result 一起使用,封装多个结果集
@One 实现一对一结果集封装
@Many 实现一对多结果集封装

1.1.2 MyBatis 增删改查

实体类

public class Student {
    private Long sId;
    private String sName;
    private Long sAge;
    private String sSex;
	
	// set and get

}

DAO


public interface StudentDao {

    @Select("select * from student")
    public List<Student> findAll();

    @Select("select * from where s_id = #{id} ")
    public Student findOne(Long id);

    @Insert("insert into student values (#{sId}, #{sName}), #{sAge}, #{sSex}")
    public int insert(Student student);

    @Update("update from student set s_id = #{sId}, s_name = #{sName}, s_age = #{sAge}, s_sex = #{sSex}")
    public int update(Student student);
    
    @Delete("delete from student where s_id = #{id} ")
    public int delete(Long id);
}

配置文件

<typeAliases>
    <package name="com.software.mybatis.entity"/>
</typeAliases>

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/db"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>

<mappers>
	<!-- 指定接口所在的包 -->
    <package name="com.software.mybatis.dao"/>
	<!-- 指定接口 -->
    <mapper class="com.software.mybatis.dao.StudentDao"/>
</mappers>

测试


public class MybatisDemo {

    private StudentDao studentDao;

    @Before
    public void before() throws IOException {
        // 加载核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        // 获得 sqlSession 工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        // 获得 sqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 获取 mapper
        studentDao = sqlSession.getMapper(StudentDao.class);
    }

    @Test
    public void TestA() throws IOException {
        List<Student> studentList = studentDao.findAll();

        System.out.println(studentList);
    }

}


  我们可以看到,明明结果已经查询出来了,为什么打印出来却是空的。这个是因为属性名和列名不一致造成的,类似于我们这种 sId s_id 可以打开驼峰之自动转换。如果二者之间没有任何联系就需要使用 @Results 一一映射。

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
@Select("select * from student")
@Results(value = {
                @Result(property = "sId", column = "s_id"),
                @Result(property = "sName", column = "s_name"),
                @Result(property = "sAge", column = "s_age"),
                @Result(property = "sSex", column = "s_sex")
})
public List<Student> findAll();





1.2 复杂映射

1.2.1 注解详解

注解 说明
@Results 代替的是标签该注解中可以使用单个@Result注解,也可以使用@Result集合
使用格式:@Results({@Result(),@Result()})或@Results(@Result())
@Result 代替了标签和标签
@Result中属性介绍:
column:数据库的列名
property:需要装配的属性名
one:需要使用的@One 注解(@Result(one=@One)()))
many:需要使用的@Many 注解(@Result(many=@many)()))
@One(一对一) 代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
@One注解属性介绍:
select:指定用来多表查询的sqlmapper使用格式:@Result(column="",property="".one=@One(select="))
@Many(一对多) 代替了标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。
使用格式:@Result(property="".column=",many=@Many(select="))

1.2.2 一对一

实体类

public class Student {
    private Long sId;
    private String sName;
    private Long sAge;
    private String sSex;
    private Class class;

    // set and get
}
public class Class {
    private Long cId;
    private String cName;
    private String cAddr;

    // set and get
}

DAO

public interface ClassDao {
    @Select("select * from class where c_id = #{id} ")
    public Class findById(Long id);
}
public interface StudentDao {

    @Select("select * from student")
    @Results({
            @Result(property = "sId", column = "s_id"),
            @Result(property = "sName", column = "s_name"),
            @Result(property = "sAge", column = "s_age"),
            @Result(property = "sSex", column = "s_sex"),
            // 类似于先查询出 student 然后拿 c_id 再去查 class
            @Result(property = "class", column = "c_id", javaType = Class.class,
            		one = @One(select = "com.software.mybatis.dao.ClassDao.findById"))
    })
    public List<Student> findAll();
}

1.2.3 一对多

实体类

public class Student {
    private Long sId;
    private String sName;
    private Long sAge;
    private String sSex;
    private Long cId;

    // set and get
}
public class Class {
    private Long cId;
    private String cName;
    private String cAddr;
    private List<Student> students;

    // set and get
}

DAO

public interface StudentDao {
    @Select("select * from where c_id = #{id} ")
    public List<Student> findByCid(Long id);
}
public interface ClassDao {
    @Select("select * from class")
    @Results({
            @Result(property = "cId", column = "c_id"),
            @Result(property = "cName", column = "c_name"),
            @Result(property = "cAddr", column = "c_addr"),
            // 类似于先查询 class 然后使用 c_id 查询 student
            @Result(property = "students", column = "c_id", javaType = List.class,
                    many = @Many(select = "com.software.mybatis.dao.StudentDao.findByCid")),
    })
    public List<Class> findAll();
}

1.2.4 多对多

实体类

public class Course {
    private Integer cId;
    private String cName;
    private List<Student> students;
    
    // set and get
}
public class Student {
    private Integer sId;
    private String sName;
    private Long sAge;
    private String sSex;
    private List<Course> courses;
        
    // set and get
}

DAO

public interface CourseDao {
    @Select("select * from course c, s_c sc where c.c_id = sc.c_id and sc.s_id = #{id} ")
    public List<Course> findBySid(Long id);
}
public interface StudentDao {
    @Select("select * from student")
    @Results({
            @Result(property = "sId", column = "s_id"),
            @Result(property = "sName", column = "s_name"),
            @Result(property = "sAge", column = "s_age"),
            @Result(property = "sSex", column = "s_sex"),
            // 类似于先查询 student 然后连接查询 course 和 s_c 表条件为 c.c_id = sc.c_id and s_id = sc.s_id
            @Result(property = "Courses", column = "s_id", javaType = List.class,
            		many = @Many(select = "com.software.mybatis.dao.CoursesDao.findBySid"))
    })
    public List<Student> findAll();
}



 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服