Mybatis使用入门,这一篇就够了

mybatis中,封装了一个sqlsession 对象(里面封装有connection对象),由此对象来对数据库进行CRUD操作。

运行流程

mybatis有一个配置的xml,用于配置数据源、映射Mapping,xml的文件名可以任取,为了方便,我们还是起mybatis-config.xml

我们读取此配置的xml,获得一个sqlsession,之后由此对象类进行数据库的CRUD操作

Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSession = factory.openSession(); 入门使用 1. 创建实体类和Dao类 2. 配置mybatis-config.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> <!-- 引入外部资源文件--> <properties resource="jdbc.properties"/> <!-- 配置数据源环境 --> <environments default="development"> <environment> <!-- 数据库事务管理类型 --> <transactionManager type="JDBC"/> <!-- 数据源,type=pooled 说明是使用连接池方式,可以节省资源 --> <dataSource type="POOLED"> <!-- 调用资源文件里的用户信息--> <property value="${jdbc.driver}"/> <property value="${jdbc.url}"/> <property value="${jdbc.username}"/> <property value="${jdbc.password}"/> </dataSource> </environment> </environments> </configuration> 3. 定义连接数据库工具,可以获得sqlsession对象

Dao类中每次进行CRUD操作,都要执行一次openSession方法来获得SqlSession对象,造成资源的浪费和代码的重复

所以,和之前的JdbcUtil工具类一样,我们也定义定义一个工具类MyBatisUtil,用来返回SQLSession对象

static SqlSessionFactory sqlSessionFactory = null; static { try { // 加载mybatis配置文件,并创建SqlSessionFactory实例 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //这个build方法可以接受几种不同的参数,如Reader/InputSteam等 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { } } public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } public static void closeSqlSession(SqlSession sqlSession){ if (sqlSession != null) { sqlSession.close(); } } 4. sql语句写在mapper中

mapper文件放在了resources下面

Mybatis使用入门,这一篇就够了

Mybatis中,sql语句则是写在了xml文件中,这些xml文件也称为mapper映射文件

mapper标签如果带有xmln属性,IDEA会报解析xml错误,得把xmln属性删除

<?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"> <!-- namespace: 命名空间,用于标识每一个Mapper XML文件中的语句,预防在不同的Mapper XML文件中存在相同的语句ID --> <mapper namespace="employeeMapper"> <!-- resultType: 也称为自动映射,只有在表的列名与POJO类的属性完全一致时使用,会比较方便,全类名 --> <select resultType="com.wan.bean.Employee"> select * from employee </select> </mapper> 5. 在mybatis-config.xml文件中注册mapper <?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> <!-- 省略数据源配置--> <mappers> <mapper resource="com/wan/mapping/employeeMapper.xml"/> <!--如果还有mapper,则继续添加 --> </mappers> </configuration> 6. dao类通过sqlsession进行查询 SqlSession sqlSession = MybatisUtil.getSqlSession(); // 调用语句,如果有参数,传入参数 //参数为命名空间namespace+id,执行xml中的sql语句 List<Employee> list = sqlSession.selectList("employeeMapper.selectAll");

PS:如果是插入、更新和删除操作,还需要提交操作,默认是不会自动提交的

sqlSession.commit(); 补充 1.typeAliases标签 <select resultType="com.wan.bean.Employee"> select * from employee </select>

resultType属性需要全类名,我们可以使用typeAliases标签来简化输入

typeAliases标签需要在mybatis-config.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> <properties resource="jdbc.properties"/> <!--指定一个bean包 --> <typeAliases> <package/> </typeAliases> <!--省略配置数据源等--> </configuration>

之后我们的mapper文件中就可以这样写

<!--resultType就可以不用写全包名 --> <select resultType="Employee"> select * from employee </select>

我这里只介绍用法,详解请看下面的参考链接

参考 MyBatis 配置 typeAliases 详解

2.引入mapper的四种方法

1. 文件路径注册

<mappers> <mapper resource="com/wan/mapper/EmployeeMapper.xml" /> </mappers>

2. 包名扫描注册

<mappers> <package /> </mappers>

使用这种,必须保证xxxMapper.java和xxxMapper.xml两者名字一模一样!而且是要在同一包里

3. 类名注册

<mappers> <mapper /> </mappers>

4. url注册

<mappers> <mapper url="file:/home/shizongger/workspace/Chapter3/src/com/shizongger/chapter2/mapper/RoleMapper.xml" /> </mappers>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypgwj.html