Mybatis入门

来源:互联网 发布:淘宝客推广个多少钱 编辑:程序博客网 时间:2024/05/24 07:00

Mybatis入门

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

配置Mybatis

pom.xml

若不用maven构建项目可以直接导入jar包:mybatis-x.x.x.jar。

使用Maven:需将下面的dependency 代码置于 pom.xml 文件中:

<dependency>
  <groupId>
org.mybatis</groupId>
  <artifactId>
mybatis</artifactId>
  <version>
3.3.0</version>
</dependency>

 

Configuration.xml

<configuration>  <!--配置包的别名-->  <typeAliases>    <typeAlias alias="my.Student" type="com.seu.sun.model.Student"/>    <!--<package name="com.seu.sun.model"/>--><!--也可以这样写包名-->  </typeAliases>  <environments default="development">    <environment id="development">      <transactionManager type="JDBC">        <property name="" value=""/>      </transactionManager>      <dataSource type="UNPOOLED">        <property name="driver" value="com.mysql.jdbc.Driver"/>        <property name="url" value="jdbc:mysql://localhost:3306/test"/>        <property name="username" value="root"/>        <property name="password" value="0000"/>      </dataSource>    </environment>  </environments>  <!--配置一个包含完整类路径的xml文件-->  <mappers>    <mapper resource="com/seu/sun/mybatisConfig/mapper/Student.xml"/>  </mappers></configuration>

Student.xml

<!DOCTYPE mapper        PUBLIC "-//com.seu.sun.mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--对应接口的包名接口名(无需实现)使用接口的用法--><mapper namespace="com.seu.sun.mybatisConfig.mapper.StudentMapper">    <resultMap type="my.Student" id="StudentsResult">        <id column="id" jdbcType="INTEGER" property="id"/>        <result column="name" jdbcType="VARCHAR" property="name"/>        <result column="age" jdbcType="INTEGER" property="age"/>        <result column="hobby" jdbcType="VARCHAR" property="hobby"/>    </resultMap>    <select id="selectAll" resultMap="StudentsResult">        SELECT id,name,age,hobby FROM students    </select>    <select id="selectById" resultMap="StudentsResult">        SELECT id,name,age,hobby FROM students WHERE id=#{id}    </select>    <insert id="insert">        INSERT INTO students(name,age,hobby)          VALUES (#{name},#{age},#{hobby})    </insert>    <update id="updateById">        UPDATE students SET name = #{name},age=#{age} WHERE id=#{id}    </update>    <delete id="deleteById">        DELETE FROM students WHERE id=#{id}    </delete>    </mapper>

 

DBAccess.java

XML 中构建 SqlSessionFactory

用于连接数据库,获得sqlSession会话

/** * 访问数据库类 */public class DBAccess {   public SqlSession getSqlSession() throws IOException {      // 通过配置文件获取数据库连接信息      Reader reader = Resources.getResourceAsReader("com/seu/sun/mybatisConfig/Configuration.xml");      // 通过配置信息构建一个SqlSessionFactory      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);      // 通过sqlSessionFactory打开一个数据库会话      SqlSession sqlSession = sqlSessionFactory.openSession();      return sqlSession;   }}

 

纯XML实现方法

testCRUD.java

编写增删改查的各个方法,对应Student.xml文件中映射的方法。

/** * 实现方法有XML和接口方法 */public class testCRUD {    private static SqlSession sqlSession;    public static void main(String[] args) throws IOException {        DBAccess dbAccess = new DBAccess();        sqlSession=dbAccess.getSqlSession();//        testSelect();//        testSelectById();//        testInsert();//        testUpdateById();//        testDeleteById();        useInterface();        sqlSession.close();    }    /**     * 增删改查操作     * 传入的类型参数可以为基本类型(一个),JavaBean(一个)     * 当参数为多个时,可以使用Map(需要自己建立对应Key-Value)     * 也可以是用@Param注解(接口的方法,下面介绍)     * */    public static void testSelect(){        List<Student> list = new ArrayList<>();
       //若冲突需要些写mappernamespace        list=sqlSession.selectList("selectAll");        for(Student s:list){            System.out.println(s.getName()+s.getHobby());        }    }    public static void testSelectById(){//        Student s = new Student();//        s.setId(6);//也可以传入Student对象,可以自动识别        Student s = sqlSession.selectOne("selectById",1);        System.out.println(s.getName()+s.getHobby());    }    public static void testInsert(){        Student s = new Student();        s.setAge(10);s.setHobby("跳舞");s.setName("小王");        sqlSession.insert("insert",s);        sqlSession.commit();    }    public static void testUpdateById(){        Student s = new Student();        s.setId(9);        s.setAge(99);s.setHobby("没有");s.setName("小小");        //可以通过map对参数直接赋值//        Map<String,Object> map = new HashMap<>();//        map.put("name","xiaohua");map.put("id",9);map.put("age",20);        sqlSession.update("updateById");        sqlSession.commit();    }    public static void testDeleteById(){        sqlSession.delete("deleteById",10);        sqlSession.commit();    }

 

接口配合XML实现

接口可以配合XML使用,也可以配合注解来使用。XML可以单独使用,注解必须在接口中使用。

写对应的接口,方法名即为student.xml中对应的方法id

StudentMapper.java

/** * 参数直接写在方法声明中,多个参数用@Param注解 */public interface StudentMapper {    List<Student> selectAll();    Student selectById(int id);    int insert(Student student);    int updateById(@Param("id")int id,@Param("name")String name,@Param("age")int age);    int deleteById(int id);}

 

testCRUD.java

public static void useInterface(){    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);    studentMapper.selectAll();    studentMapper.selectById(1);    Student s = new Student();    s.setId(3);    s.setName("小花");    s.setHobby("待定");    s.setAge(13);    studentMapper.insert(s);    studentMapper.deleteById(11);    studentMapper.updateById(9,"呵呵",18);    sqlSession.commit();}

 

注解方式基本用法

Mybatis注解就是将SQL语句直接写在接口上。

优点:开发效率高

缺点:修改SQL都需要重新编译

student2.xml

<!--对应接口的包名+接口名(无需实现)--><mapper namespace="com.seu.sun.mybatisConfig.mapper.Student2Mapper">    <resultMap type="my.Student" id="StudentsResult">        <id column="id" jdbcType="INTEGER" property="id"/>        <result column="name" jdbcType="VARCHAR" property="name"/>        <result column="age" jdbcType="INTEGER" property="age"/>        <result column="hobby" jdbcType="VARCHAR" property="hobby"/>    </resultMap></mapper>

 

Student2Mapper.java

public interface Student2Mapper {    @Select({"select id,name,age,hobby",             "from students",             "where id=#{id}"})    Student selectById(int id);    @Select("select id,name,age,hobby from students")    List<Student> selectAll();    @Insert("insert students (name,age,hobby) VALUES (#{name},#{age},#{hobby})")    int insert(Student student);    @Update("UPDATE students SET name = #{name},age=#{age} WHERE id=#{id}")    int updateById(@Param("id")int id, @Param("name")String name, @Param("age")int age);    @Delete("DELETE FROM students WHERE id=#{id}")    int deleteById(int id);}

 

testCRUD.java

public static void useInterface2(){    Student2Mapper student2Mapper = sqlSession.getMapper(Student2Mapper.class);    Student s = student2Mapper.selectById(1);    System.out.println(s.getName());    for(Student stu:student2Mapper.selectAll()){        System.out.println(stu.getId()+stu.getName());    }    s.setAge(100);s.setId(9);    student2Mapper.insert(s);    student2Mapper.deleteById(14);    sqlSession.commit();}

 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小飞象会员 游乐设备小飞象 小飞象故事 dumbo 小飞象 小飞象是什么 小飞象高新店 小飞象葡国餐 小飞象活动 m4a3e2小飞象 小飞象服装 小飞象乐园 小飞象儿童摄影 小飞象学生电脑 小飞象名字 小飞象动物 小飞象的故事 m4a3e2 小飞象 坦克世界小飞象 小飞象的名字 乐从小飞象西餐厅 猫头鹰和小飞象 小飞象logo 新飞飞幻彩小飞象 小飞象 英语 小飞象简介 小飞象配件 小飞象解说战地模拟器 小飞象解说自然灾害模拟器 小飞象解说血染小镇 小飞象的东西怎么样 小飞象训练发展中心 坦克世界小飞象怎么样 乡村神级小仙农 小飞鱼 私房催乳师 小飞鱼 小飞鱼婴儿游泳馆 小飞鱼图片 飞鱼服装是什么品牌 飞鱼歌曲 打飞鸡 飞鸡 锦鸡会飞吗