JavaEE--SSM--MyBatis-mybatishibernate哪家强?-mybatis介绍及入门

xiaoxiao2021-02-28  38

一.mybatis的介绍:

mybatis最初是apache的开源项目ibatis,后来被迁移到了Google公司,并改名为mybatis.它在GitHub上可以进行下载.

mybatis是一个优秀的持久层框架.它直接对jdbc进行了封装,简化了我们使用jdbc时的一些冗余的步骤(创建connection,执行statement...),让我们只需关注SQL本身.

mybatis通过xml/注解方式配置使用jdbc时的冗余步骤,通过pojo对象和statement中的sql进行映射并生成可执行sql语句,并将执行后的结果映射成pojo对象返回.

二.mybatis与hibernate的区别:

mybatis的优点:

简单易学,需要程序员手动编写原生sql语句,灵活性高,适合软件需求变化频繁的互联网项目,企业运行项目.

mybatis的缺点:

它不完全是一个ORM框架,数据无关性差,不能直接切换其他数据库进行使用.如果想支持多数据库软件则需要定义多套sql映射文件,工作量大,比较麻烦.

hibernate的优点:

hibernate是一个完全的ORM框架,对象关系映射能力较强,数据无关性好,对于需求较为固定的项目,如政府,医院的内部系统.

hibernate的缺点:

hibernate比较复杂,学习难度较大,想要完全掌握需要大量的学习和工作经验.

总结:其实mybatis与hibernate各有利弊,不能有mybatis完胜hibernate的想法.我们在实际应用中选择哪个框架需要根据不同的需求进行分析,从而选择出最适合自己项目的框架.

三.使用mybatis进行增删改查(数据库使用mysql):

1.创建项目(普通java项目即可)

2.导入jar包

mysql的连接包

mybatis包及其依赖包

3.创建数据库及user表.

CREATE TABLE `user` (  `id` int(10) NOT NULL AUTO_INCREMENT,  `username` varchar(40) DEFAULT NULL,  `sex` varchar(40) DEFAULT NULL,  `birthday` datetime DEFAULT NULL,  `address` varchar(40) DEFAULT NULL,  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

4.根据user表创建pojo类

public class User { private Integer id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日

private String address;// 地址

//自己生成get/set方法

//自己生成tostring方法

}

5.创建User的映射文件 User.xml 注: 与User在同一个包下

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 命名空间 将接口和mapper进行绑定,不然光根据id可能会有重名现象 --> <mapper namespace="test"> <!-- parameterType:入参类型,简单的直接写,复杂的加上类全名  --> <!-- resultType:返回类型,类全名/数据库表字段名与POJO对象中属性名一致(自动映射)  --> <!-- #{value}占位符 输入参数的数据类型如果是基本类型或简单类型  #{随意写} 特点:防止sql注入 --> <!-- ${} 字符串拼接   输入参数的数据类型如果是基本类型或简单类型  ${value}  页面传递过来的话,不防Sql注入      --> <select id="findUserById" parameterType="Integer" resultType="cn.asiainfo.mybatis.pojo.User"> select * from user where id = #{v}; </select> <!-- 两种写法 "%"#{v}"%"/'%${value}%' --> <select id="findUserByName" parameterType="String" resultType="cn.asiainfo.mybatis.pojo.User"> select * from user where username like "%"#{v}"%" </select> <!-- useGeneratedKeys="true" keyProperty="对应的主键的对象" 当主键是自增的情况下,添加一条记录的同时,其主键是不能使用的,为了使用主键需要加上这两个配置 --> <insert id="insertUser" parameterType="cn.asiainfo.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id"> insert into user (username,birthday,sex,address)  values (#{username},#{birthday},#{sex},#{address}); </insert> <update id="updateUser" parameterType="cn.asiainfo.mybatis.pojo.User"> update user set username = #{username}, sex = #{sex}, birthday = #{birthday}, address = #{address} where  id = #{id} </update> <delete id="deleteUser" parameterType="Integer"> delete from user where id = #{id} </delete> </mapper>

6.创建mybatis的主配置文件SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/day91mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment>

</environments>

<!-- Mapper的位置 n个 -->

    <mappers>

        <mapper resource="User.xml" />

    </mappers>

</configuration>

7.创建测试类

public class MyBatisFirst { private SqlSessionFactory sqlSessionFactory; //创建工厂 @Before public void ininFactory() throws Exception { // 定义数据源 String resource = "SqlMapConfig.xml"; // 获取输入流 InputStream in = Resources.getResourceAsStream(resource); // 创建工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); } // 根据id查询用户 @Test public void findUserById() { // 获取session SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行查询 test.findUserById表示test包下配置的findUserById方法, User user = sqlSession.selectOne("test.findUserById", 1); // 输出结果 System.out.println(user); } // 根据name查询用户 @Test public void findUserByName() { // 获取session SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行查询 List<User> list = sqlSession.selectList("test.findUserByName", "孙"); // 输出查询结果 for (User user : list) { System.out.println(user); } } // 插入用户 @Test public void insertUser() { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建pojo对象 User user = new User(); user.setUsername("猪八戒"); user.setSex("公猪"); user.setAddress("高老庄"); user.setBirthday(new Date()); // 执行插入 sqlSession.insert("test.insertUser", user); // 获取刚才插入时的id System.out.println(user.getId()); sqlSession.commit(); } // 修改用户 @Test public void updateUser() { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建pojo对象 User user = new User(); user.setId(4); user.setUsername("卷帘大将"); user.setSex("男"); user.setAddress("南天门"); user.setBirthday(new Date()); // 执行操作 sqlSession.update("test.updateUser", user); // 提交事务

sqlSession.commit();

                System.out.println("修改用户成功");

} // 删除用户 @Test public void deleteUser() { SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("test.deleteUser", 7); // 提交事务

sqlSession.commit();

                System.out.println("删除用户成功");

}

}

8.测试结果:

测试前数据库数据如下:

测试根据id查询user

测试根据name进行模糊查询user

测试新增用户(返回的7是新插入的数据主键id):

测试修改用户

测试删除用户

觉得对你有帮助或者喜欢的可以点个赞哦~~

转载请注明原文地址: https://www.6miu.com/read-2624292.html

最新回复(0)