2.全局的配置文件SqlMapConfig.xml
[AppleScript] 纯文本查看 复制代码
<!-- 配置properties
可以在标签内部配置连接数据库的信息。也可以通过属性引用外部配置文件信息
resource属性: 常用的
用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下。
url属性:
是要求按照Url的写法来写地址
URL:Uniform Resource Locator 统一资源定位符。它是可以唯一标识一个资源的位置。
它的写法:
http://localhost:8080/mybatisserver/demo1Servlet
协议 主机 端口 URI
URI:Uniform Resource Identifier 统一资源标识符。它是在应用中可以唯一定位一个资源的。
-->
<!--<properties url="file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.properties">-->
<!--<!– <property name="driver" value="com.mysql.jdbc.Driver"></property>-->
<!--<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>-->
<!--<property name="username" value="root"></property>-->
<!--<property name="password" value="1234"></property>–>-->
<!--</properties>-->
<!--<!–使用typeAliases配置别名,它只能配置domain中类的别名 –>-->
<!--<typeAliases>-->
<!--<!–typeAlias用于配置别名。type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就再区分大小写 -->
<!--<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>–>-->
<!--<!– 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写–>-->
<!--<package name="com.itheima.domain"></package>-->
<!--</typeAliases>-->
<properties resource="jdbcConfig.properties"></properties>
<typeAliases>
<!--<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>-->
<package name="com.itheima.domain"></package>
</typeAliases>
<!--配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件的位置 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>
<!-- package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了 -->
<!--<package name="com.itheima.dao"></package>-->
</mappers>
三.入门案例
1.步骤
[AppleScript] 纯文本查看 复制代码
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before//用于在测试方法执行之前执行
public void init()throws Exception{
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
sqlSession = factory.openSession();
//4.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After//用于在测试方法执行之后执行
public void destroy()throws Exception{
//提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
@Test
public void testFindAll(){
//5.执行查询所有方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
C:/Users/47616/AppData/Local/YNote/data/qqA1D4460845C245DFA31D1673BD51BE03/a2496fa964a04f29976f1760e50e5d05/clipboard.png
2.配置文件路径:
以后用相对路径和绝对路径都比较少,大部分使用两种方式写配合文件:
第一个:使用类加载器,它只读取类路径的配置文件
第二个:使用ServletContext的getRealPath()方法获取真实路径
3.使用了三种设计模式
1.构建者模式 : 把对象的创建细节隐藏,使使用者直接调用方法即可拿到对象
2.工厂模式
3.代理对象模式
sql语句中参数的传入
<!-- 保存用户--> <insert id="saveUser" parameterType="com.itheima.domain.User"> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
细节: parameterType 属性: 代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。 sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。 #{}中内容的写法: 由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。 它用的是 ognl 表达式。 ognl 表达式: 它是 apache 提供的一种表达式语言,全称是: Object Graphic Navigation Language 对象图导航语言 它是按照一定的语法格式来获取数据的。 语法格式就是使用 #{对象.对象}的方式
#{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用 getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user. 而直接写 username.
以基本数据类型: mybatis中已经给基本数据类型和一些常见的集合类型等起了别名;
以map集合为参数 : 在#{写key值} ,获取map集合中的value值
sql语句中有两个参数: 在接口的方法中的参数前面加@param("起别名")注解,在sql语句中传别名;
四.mapper配置文件的一些注意事项
1.实体类的属性名称和表中的字段名必须一致才能实现封装,如果不一致时,有两种解决办法可以使其一致;
1.在sql语句中给查询的结果集的字段名起和pojo属性一致的属性名;代码增多;
2.在mapper配置文件中,配置<resultMap>标签配置;解析比较麻烦,但是减少代码的书写,方便开发
2.mappers(映射器)
1.<mapper resource=" " />
使用相对于类路径的资源 如:<mapper resource="com/itheima/dao/IUserDao.xml" />
2.<mapper class=" " />
使用 mapper 接口类路径 如:<mapper class="com.itheima.dao.UserDao"/> 注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
3.<package name=""/>
注册指定包下的所有 mapper 接口 如:<package name="cn.itcast.mybatis.mapper"/> 注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
3.起别名注意事项:
基本类型和String我们以直接写类型名称, 也可以使用包名 . 类名的方式 ,例如 java.lang.String。 实体类类型,目前我们只能使用全限定类名。 究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名, 而我们的是实体类并没有注册别名,所以必须写全限定类名。我们可以通过<typeAliases>标签配置别名.