导入坐标
在 pom.xml 文件中添加 Mybatis3.4.5 的坐标,如下:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
mybatis入门中的设计模式分析(理解)
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in); ------> 构建者模式:把对象构建的细节隐藏,使用者直接调用build方法就可以拿到对象
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession(); ------> 工厂模式: 可以解耦,降低类之间的依赖关系
//5.使用 SqlSession 创建 dao 接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class); ------> 代理模式: 不修改目标代码的基础上就可以对已有方法进行增强
//6.使用代理对象执行查询所有方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();
Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式(重点)
1、使用别名查询解决实体类属性和数据库列名不对应
<select id="findAll" resultType="com.dk.domain.User">
select id as userId,username as userName,birthday as userBirthday,sex as userSex,address as userAddress from user
</select>
2、使用resultMap标签可以建立查询的列名和实体类的属性名称不一致
<resultMap id="resultMap" type="com.dk.domain.User">
<id property="userId" column="id"/>
<result property="userAddress" column="address"/>
<result property="userSex" column="sex"/>
<result property="userBirthday" column="birthday"/>
</resultMap>
<select id="findAll" resultMap="resultMap">
select * from user
</select>
id 标签:用于指定主键字段
result 标签:用于指定非主键字段
property 属性:用于指定实体类属性名称
column 属性:用于指定数据库列名
properties标签的使用及细节
第二种方式:
在classpath下定义属性文件jdbcConfig.properties,将连接信息存放到属性文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/eesy_mybatis
jdbc.username=root
jdbc.password=root
引入属性文件jdbcConfig.properties
typeAliases标签和package标签(掌握)
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.itheima.domain.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="com.itheima.domain"/>
<package name="其它包"/>
</typeAliases>
批量定义别名:
<typeAliases>
<package name="com.dk.domain"/>
</typeAliases>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
使用别名:
<select id="findAll" resultType="user">
select * from user
</select>
使用相对于类路径的资源:
如:<mapper resource="com/dk/dao/IUserDao.xml" />
使用 mapper 接口类路径
如:<mapper class="com.dk.dao.UserDao"/>
注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
注册指定包下的所有 mapper 接口
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<!--<mapper resource="com/itheima/dao/IUserDao.xml"/>-->
<package name="com.itheima.dao"/>
</mappers>