网站上用什么格式的图片,wordpress 广告公司主题,怎么生成网站地图,搜索引擎营销策略有哪些目录 什么是框架
1.框架的概述
2.框架要解决的问题
3. 软件开发的分层重要性
4.分层开发的常见框架
MyBatis 框架概述
JDBC 编程的回顾
JDBC 问题分析
MyBatis 框架快速入门
1.官网下载MyBatis框架jar包
2.搭建MyBatis 开发环境
3. 编写持久层接口的映射文件 IUserD…目录 什么是框架
1.框架的概述
2.框架要解决的问题
3. 软件开发的分层重要性
4.分层开发的常见框架
MyBatis 框架概述
JDBC 编程的回顾
JDBC 问题分析
MyBatis 框架快速入门
1.官网下载MyBatis框架jar包
2.搭建MyBatis 开发环境
3. 编写持久层接口的映射文件 IUserDao.xml
4.编写MyBatis的核心配置文件 SqlMapConfig.xml
5.数据库和表的准备
6.编写测试类进行测试
7.入门案例总结
8.入门案例流程图
保存用户的操作
1.在接口中添加一个保存的方法
2.修改接口的映射文件
3.测试保存用户的操作注意增删改的操作需要提交事务 sqlSession.commit()
4.使用单元测试的注解
使用dao接口实现类的方式来进行查询所有用户的操作了解
采用注解的方式实现查询所有用户的操作先感受一下后面再具体讲解注解的方式
更新用户和删除用户的操作
1.恢复到我们之前采用映射文件的方式
2.更新用户的操作
3.删除一个用户
查询单个用户和模糊查询
1.根据id查询单个用户
2.根据姓名模糊查询
聚合函数的查询
1.查询所有用户的个数
获取自增长键的值
1.但我新保存一个用户时我想获取刚插入的这条数据的自增长键的值
parameterType传入参数的类型
1.创建一个QueryVo类类中维护着一个User对象
2.在接口中提供查询方法方法的参数要一个 QueryVO类型
3.在映射文件中添加配置
4.测试
实体类的属性名和表中的字段名不一致怎么办
1.把实体类中的属性名改一下
2.在映射文件中配置实体类的属性名和表中字段名的对应关系
3.修改返回数据类型的配置
4.测试查询用户即可
使用properties标签引用外部的配置文件
给实体类起别名
使用package标签扫描该包下所有接口 什么是框架
1.框架的概述
框架Framework是整个或部分系统的可重用设计表现为一组抽象构件及构件实例间交互的方法;另一种
定义认为框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
简而言之框架其实就是某种应用的半成品就是一组组件供你选用完成你自己的系统。简单说就是使用别
人搭好的舞台你来做表演。而且框架一般是成熟的不断升级的软件。
2.框架要解决的问题
框架要解决的最重要的一个问题是技术整合的问题在 J2EE 的 框架中有着各种各样的技术不同的
软件企业需要从 J2EE 中选择不同的技术这就使得软件企业最终的应用依赖于这些技术技术自身的复杂性和技
术的风险性将会直接对应用造成冲击。而应用是软件企业的核心是竞争力的关键所在因此应该将应用自身的设
计和具体的实现技术解耦。这样软件企业的研发将集中在应用的设计上而不是具体的技术实现技术实现是应
用的底层支撑它不应该直接对应用产生影响。 框架一般处在低层应用平台如 J2EE和高层业务逻辑之间的中间层。
3. 软件开发的分层重要性
框架的重要性在于它实现了部分功能并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现
软件工程中的“高内聚、低耦合”。把问题划分开来各个解决易于控制易于延展易于分配资源。我们常见的
MVC 软件设计思想就是很好的分层思想。 4.分层开发的常见框架 MyBatis 框架概述
mybatis 是一个优秀的基于 java 的持久层框架它内部封装了 jdbc使开发者只需要关注 sql 语句本身
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来并通过 java 对象和 statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。
采用 ORM 思想解决了实体和数据库映射的问题对 jdbc 进行了封装屏蔽了 jdbc api 底层访问细节使我
们不用与 jdbc api 打交道就可以完成对数据库的持久化操作。
为了我们能够更好掌握框架运行的内部过程并且有更好的体验下面我们将从自定义 Mybatis 框架开始来
学习框架。此时我们将会体验框架从无到有的过程体验也能够很好的综合前面阶段所学的基础。
JDBC 编程的回顾
1.加载驱动
2.获取数据库连接对象
3.获取操作对象
4.编写SQL语句
5.执行SQL语句
6.遍历结果集封装数据
7.释放资源
JDBC 问题分析
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能如果使用数据库链接池可解决此问题。
2、Sql 语句在代码中硬编码造成代码不易维护实际应用 sql 变化的可能较大sql 变动需要改变 java
代码。
3、使用 preparedStatement 向占有位符号传参数存在硬编码因为 sql 语句的 where 条件不一定可能
多也可能少修改 sql 还要修改代码系统不易维护。
4、对结果集解析存在硬编码查询列名sql 变化导致解析代码变化系统不易维护如果能将数据库记
录封装成 pojo 对象解析比较方便。
MyBatis 框架快速入门
1.官网下载MyBatis框架jar包 官网http://www.mybatis.org/mybatis-3/zh/getting-started.html如果使用 Maven 来构建项目则需将下面的 dependency 代码置于 pom.xml 文件中
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version
/dependency
2.搭建MyBatis 开发环境
1.创建普通的Maven工程
2.在 pom.xml 文件中添加 Mybatis3.4.5 的坐标如下 还要添加单元测试jar包数据库驱动jar包log4j日志jar包dependencies dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.4.5/version /dependency dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.12/version scopetest/scope /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.6/version scoperuntime/scope /dependency dependency groupIdlog4j/groupId artifactIdlog4j/artifactId version1.2.12/version /dependency /dependencies 3.在 org.westos.domain 包下编写实体类public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; //get set 方法略 自己补上}4.在org.westos.dao 包下编写接口 IUserDao
IUserDao 接口就是我们的持久层接口也可以写成 UserDao 或者 UserMapper,具体代码如下
public interface IUserDao {//查询所有用户ListUser findAll();
}
3. 编写持久层接口的映射文件 IUserDao.xml
1.要求 创建位置必须和持久层接口在相同的包中。 名称必须以持久层接口名称命名文件名扩展名是.xml 2.在maven工程的resources目录下创建org/westos/dao 这个三级目录然后在这个目录下创建IUserDao.xml 映射文件3.在 resources目录下创建org/westos/dao 这个三级目录时你可以一级一级创建不要直接写org.westos.dao, 这样创建出来是一个文件夹你可以用 / 斜杠 隔开创建多级目录 例如org/westos/dao 这样创建才是多级目录 IUserDao.xml 映射文件中的内容如下需要注意namespace的值是接口的全限定名 id的值是接口中的方法名
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
!--注意namespace值是接口的全路径--
mapper namespaceorg.westos.dao.IUserDao!--注意id的值是接口中的方法名 resultType 查询返回的结果类型--select idfindAll resultTypeorg.westos.domain.Userselect * from user;/select
/mapper
4.编写MyBatis的核心配置文件 SqlMapConfig.xml
1.在工程的resources目录下创建 SqlMapConfig.xml配置文件内容如下?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultmysqlenvironment idmysqltransactionManager typeJDBC/transactionManagerdataSource typePOOLED!--配置数据源的四个基本参数--property namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/mybatis_test/property nameusername valueroot/property namepassword value123456//dataSource/environment/environments!--引入dao接口的映射文件--mappersmapper resourceorg/westos/dao/IUserDao.xml/mapper/mappers
/configuration
5.数据库和表的准备
我已经提前准备好了可以从我的资料中导入
6.编写测试类进行测试
1.在工程的Test 目录下的java目录下编写测试类进行测试
public class TestUserDao {Testpublic void testFindAll() throws IOException {//读取MyBatis的核心配置文件InputStream in Resources.getResourceAsStream(SqlMapConfig.xml);//构建工工厂SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in);//打开SqlSessionSqlSession sqlSession factory.openSession();//获取接口的代理对象IUserDao userDao sqlSession.getMapper(IUserDao.class);//执行查询操作ListUser list userDao.findAll();for (User user : list) {System.out.println(user);}//释放资源in.close();sqlSession.close();}
}
7.入门案例总结
通过快速入门示例我们发现使用 mybatis 是非常容易的一件事情因为只需要编写 Dao 接口并且按照
mybatis 要求编写两个配置文件就可以实现功能。远比我们之前的 jdbc 方便多了。我们使用注解之后将变得更为简单只需要编写一个 mybatis 配置文件就够了。
需要你注意的事项如下
环境搭建的注意事项第一个创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。在Mybatis中它把持久层的操作接口名称和映射文件也叫做Mapper所以IUserDao 和 IUserMapper是一样的第二个mybatis的映射配置文件位置必须和dao接口的包结构相同第三个映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名第四个映射配置文件的操作配置selectid属性的取值必须是dao接口的方法名
当我们遵从了第二三四点之后我们在开发中就无须再写dao的实现类。
8.入门案例流程图 保存用户的操作
1.在接口中添加一个保存的方法
public interface IUserDao {//查询所有用户ListUser findAll();//保存用户void saveUser(User user);
}
2.修改接口的映射文件
!--注意namespace值是接口的全路径--
mapper namespaceorg.westos.dao.IUserDao!--注意id的值是接口中的方法名 resultType 查询返回的结果类型--select idfindAll resultTypeorg.westos.domain.Userselect * from user;/select!--保存用户的操作 parameterType参数类型是User对象注意语法 #{username} 会通过反射调用getUsername()取出username的值--insert idsaveUser parameterTypeorg.westos.domain.Userinsert into user(username, birthday, sex, address) values (#{username},#{birthday},#{sex},#{address})/insert
/mapper
3.测试保存用户的操作注意增删改的操作需要提交事务 sqlSession.commit() Testpublic void testSaveUser() throws IOException {InputStream in Resources.getResourceAsStream(SqlMapConfig.xml);SqlSessionFactory factory new SqlSessionFactoryBuilder().build(in);SqlSession sqlSession factory.openSession();IUserDao dao sqlSession.getMapper(IUserDao.class);//创建一个对象User user new User();user.setUsername(王力宏);user.setSex(男);user.setAddress(陕西西安);user.setBirthday(new Date());//保存用户dao.saveUser(user);//注意增删改要使用事务sqlSession.commit();//提交事务in.close();sqlSession.close();}
4.使用单元测试的注解
1.每次测试都得加载配置文件获取SqlSession 麻烦我们可以使用Junit单元测试的几个注解来解决不用每次测试都得重复写 加载配置文件获取SqlSession 的代码
2. Before 注解在Test注解执行之前调用 After 注解在Test执行完之后调用
3. 改造如下public class TestUserDao {
private SqlSessionFactory factory;private SqlSession sqlSession;private InputStream in;
Before //在Test注解执行之前调用public void init() throws IOException {//读取MyBatis的核心配置文件in Resources.getResourceAsStream(SqlMapConfig.xml);//构建工厂factory new SqlSessionFactoryBuilder().build(in);//打开SqlSessionsqlSession factory.openSession();}
Testpublic void testFindAll() throws IOException {
//获取接口的代理对象IUserDao userDao sqlSession.getMapper(IUserDao.class);//执行查询操作ListUser list userDao.findAll();for (User user : list) {System.out.println(user);}//释放资源in.close();sqlSession.close();
}
After //在Test执行完之后调用public void destory() throws IOException {//释放资源in.close();sqlSession.close();}
使用dao接口实现类的方式来进行查询所有用户的操作了解
1.我们刚才使用的方式是只提供接口并没有提供接口的实现类但是MyBatis 是可以通过实现类来完成增删改查的操作
2. 我们提供一个接口的实现类如下
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory sqlSessionFactory;//SqlSessionFactory对象通过构造方法传递进来public IUserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory sqlSessionFactory;}
public ListUser findAll() {SqlSession sqlSession sqlSessionFactory.openSession();//通过映射文件中配置的 namespaceorg.westos.dao.IUserDao 和 idfindAll 组合到一块来确定这个方法的唯一性ListUser list sqlSession.selectList(org.westos.dao.IUserDao.findAll);for (User user : list) {System.out.println(user);}return list;}
}
3.测试Testpublic void testFindAll2() throws IOException {//创建接口实现类的对象,把SqlSessionFactory对象传递过去IUserDaoImpl iUserDao new IUserDaoImpl(factory);ListUser list iUserDao.findAll();for (User user : list) {System.out.println(user);}}4.说明这种提供接口实现类的方式麻烦一般我们不采用。我们经常采用接口的代理对象的方式来做。
采用注解的方式实现查询所有用户的操作先感受一下后面再具体讲解注解的方式
1.我们可以采用注解的方式来进行查询用户的操作如果使用注解的方式我们就不需要接口的映射文件所有我们先把映射文件删掉
2.因为我们删掉了接口的映射文件所以我们在SqlMapConfig.xml中引入映射文件的配置得修改一下!--引入dao接口的映射文件--mappers!--注解的方式不需要映射文件了mapper resourceorg/westos/dao/IUserDao.xml/mapper--!--我们通过class属性来引入接口的全路径--mapper classorg.westos.dao.IUserDao/mapper/mappers3.在接口的查询所有方法上加上一个select注解public interface IUserDao {//查询所有用户Select(select * from user) //使用注解的方式来查询所有ListUser findAll();
}
4. 测试Testpublic void testFindAll() throws IOException {
//获取接口的代理对象IUserDao userDao sqlSession.getMapper(IUserDao.class);//执行查询操作ListUser list userDao.findAll();for (User user : list) {System.out.println(user);}//释放资源in.close();sqlSession.close();
}
更新用户和删除用户的操作
1.恢复到我们之前采用映射文件的方式
2.更新用户的操作
1.在接口中提供更新用户的方法public interface IUserDao {
//查询所有用户ListUser findAll();//保存用户void saveUser(User user);//更新用户void updateUser(User user);}
2.在映射文件中添加更新用户的配置!--更新用户--update idupdateUser parameterTypeorg.westos.domain.Userupdate user set username#{username},sex#{sex},birthday#{birthday},address#{address} where id#{id};/update3.测试Testpublic void testUpdateUser() throws IOException {IUserDao dao sqlSession.getMapper(IUserDao.class);//创建一个对象User user new User();user.setId(64); //设置你要更改的用户的iduser.setUsername(张学友);user.setSex(男);user.setAddress(陕西西安);user.setBirthday(new Date());//更新用户dao.updateUser(user);//注意增删改要使用事务sqlSession.commit();//提交事务}
3.删除一个用户
1.在接口中提供删除用户的方法public interface IUserDao {
//查询所有用户ListUser findAll();//保存用户void saveUser(User user);//更新用户void updateUser(User user);//根据id删除用户void deleteUser(Integer id);} 2.在映射文件中添加删除用的配置!--删除用户 parameterType 参数类型可以写 int INT 或者 java.lang.Integer 都可以。因为MyBatis框架针对int类型提供了别名所以写 int INT 都行。--delete iddeleteUser parameterTypejava.lang.Integer!--#{uid} 这里传入参数只有一个所以这个名字可以随意写只是一个占位符的作用--delete from user where id#{uid} /delete3. 测试Testpublic void testDeleteUser() throws IOException {IUserDao dao sqlSession.getMapper(IUserDao.class);//删除用户dao.deleteUser(64);//注意增删改要使用事务sqlSession.commit();//提交事务}
查询单个用户和模糊查询
1.根据id查询单个用户
1.在接口中添加查询单个用户的方法
public interface IUserDao {
//查询所有用户ListUser findAll();//保存用户void saveUser(User user);//更新用户void updateUser(User user);//根据id删除用户void deleteUser(Integer id);//根据id查询一个用户User selectUserById(Integer id);} 2.在映射文件中添加配置!--查询单个用户--select idselectUserById resultTypeorg.westos.domain.User parameterTypeINTselect * from user where id#{uid};/select3.测试Testpublic void testSelectUserByID(){IUserDao dao sqlSession.getMapper(IUserDao.class);User user dao.selectUserById(63);System.out.println(user);}
2.根据姓名模糊查询
1.在接口中添加模糊查询的方法
public interface IUserDao {//根据姓名模糊查询ListUser likeUserByUsername(String username);
}
2. 在映射文件中添加配置!--根据姓名模糊查询--select idlikeUserByUsername resultTypeorg.westos.domain.User parameterTypestringselect * from user where username like #{uname};/select3.测试Testpublic void testLikeSelect() {IUserDao dao sqlSession.getMapper(IUserDao.class);ListUser list dao.likeUserByUsername(%沈%);for (User user : list) {System.out.println(user);}
}
聚合函数的查询
1.查询所有用户的个数
1.在接口中提供查询所有用户个数的方法
public interface IUserDao {//查询所有用户的个数int selectAllUserCount();
}
2.在映射文件中添加配置select idselectAllUserCount resultTypeintselect count(*) from user;/select3.测试Testpublic void testCount(){IUserDao dao sqlSession.getMapper(IUserDao.class);int sum dao.selectAllUserCount();System.out.println(sum);}
获取自增长键的值
1.但我新保存一个用户时我想获取刚插入的这条数据的自增长键的值
1.要获取自增长键的值其实就是利用MySQL的一个函数SELECT LAST_INSERT_ID();2. 在映射文件中保存用户的操作中添加配置 insert idsaveUser parameterTypeorg.westos.domain.User!--获取自增长键的值的配置--selectKey keyPropertyid keyColumnid resultTypeint orderAFTERSELECT LAST_INSERT_ID();/selectKeyinsert into user(username, birthday, sex, address)values (#{username}, #{birthday}, #{sex}, #{address});/insert说明keyPropertyid 实体类中的id表示自增长键keyColumnid 表中的主键名resultTypeint 返回类型orderAFTER 在插入之后获取自增长键的值3.测试在保存完用户后获取 id的值Testpublic void testSaveUser() throws IOException {IUserDao dao sqlSession.getMapper(IUserDao.class);//创建一个对象User user new User();user.setUsername(王力宏);user.setSex(男);user.setAddress(陕西西安);user.setBirthday(new Date());//保存用户dao.saveUser(user);//注意增删改要使用事务sqlSession.commit();//提交事务//在保存之后获取id的值Integer id user.getId();System.out.println(id);}
parameterType传入参数的类型
我们在上一章节中已经介绍了 SQL 语句传参使用标签的 parameterType 属性来设定。
该属性的取值可以 是基本类型引用类型例如:String 类型
还可以是实体类类型POJO 类。
同时也可以使用实体类的包装 类本章节将介绍如何使用实体类的包装类作为参数传递。
开发中通过 pojo 传递查询条件 查询条件是综合的查询条件不仅包括用户查询条件还包括其它的查 询条件比如将用户购买商品信息也作为查询条件
这时可以使用包装对象传递输入参数。 Pojo 类中包含 pojo。
需求根据用户名查询用户信息查询条件放到 QueryVo 的 user 属性中。
1.创建一个QueryVo类类中维护着一个User对象
public class QueryVO {User user;//get set 方法略 自己补上
}
2.在接口中提供查询方法方法的参数要一个 QueryVO类型
public interface IUserDao {//根据VO模糊查询ListUser likeUserByVO(QueryVO vo);
}
3.在映射文件中添加配置 !--根据vo模糊查询--select idlikeUserByVO resultTypeorg.westos.domain.User parameterTypeorg.westos.domain.QueryVOselect * from user where username like #{user.username}/select说明#{user.username} user是QueryVO中的属性 会通过反射调用 getUser()获取User的对象username 是User中的属性会通过getUsername来获取值
4.测试
Testpublic void testLikeByVO() {IUserDao dao sqlSession.getMapper(IUserDao.class);User user new User();user.setUsername(%沈%);QueryVO queryVO new QueryVO();//把User对象设置给VOqueryVO.setUser(user);ListUser list dao.likeUserByVO(queryVO);for (User user1 : list) {System.out.println(user1);}
}
实体类的属性名和表中的字段名不一致怎么办
1.我们在开始做入门案例的时候我们让User中的属性名和user表中的字段名是保持一致的。那么我们不保持一致可以处理吗?可以 但是需要我们再增加配置配置实体类属性和表中字段的对应关系即可
1.把实体类中的属性名改一下
public class User implements Serializable {private Integer user_id;private String user_username;private Date user_birthday;private String user_sex;private String user_address;//get set 方法略 自己补上}
2.在映射文件中配置实体类的属性名和表中字段名的对应关系 resultMap idmyMap typeorg.westos.domain.User!--配置实体类和表中主键的对应关系--id propertyuser_id columnid/id!--配置其他普通字段的对应关系--result propertyuser_username columnusername/resultresult propertyuser_birthday columnbirthday/resultresult propertyuser_sex columnsex/resultresult propertyuser_address columnaddress/result/resultMap
3.修改返回数据类型的配置 select idfindAll resultMapmyMapselect *from user;/select说明使用 resultMapmyMap 来引用我们的映射配置
4.测试查询用户即可
使用properties标签引用外部的配置文件
1.回到我们的核心配置文件SqlMapConfig.xml 我们在里面配置了连接数据库的四个基本参数配置
dataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/mybatis_test/property nameusername valueroot/property namepassword value123456//dataSource2.那能不能把这些配置单独写在一个外部的配置文件中呢?可以。在resources目录下新键一个文件jdbcConfig.properties 文件中内容如下
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/mybatis_test
jdbc.usernameroot
jdbc.password123456
3.在SqlMapConfig.xml中使用properties标签引入外部的配置文件注意resource 是引用类路径下的配置文件这个标签放到configuration标签里面的最前面properties resourcejdbcConfig.properties
/properties4.修改dataSource 标签中的配置注意value的值要和外部配置文件中的键名保持一致dataSource typePOOLEDproperty namedriver value${jdbc.driver}/property nameurl value${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}//dataSource
给实体类起别名
1.我们回到SqlMapConfig.xml中使用 typeAliases标签给实体类起个别名!--给实体类配置别名--typeAliasestypeAlias typeorg.westos.domain.User aliasuser/typeAlias/typeAliases这个别名在使用时可以写user 或者Use 或者USER 都行2.在配置了别名后我们在映射文件中返回参数类型和传入参数类型就可以使用别名了不需要写User的全路径名update idupdateUser parameterTypeuser update user set username#{username},sex#{sex},birthday#{birthday},address#{address} where id#{id};/update3.如果说我们有很多个实体类那么一个一个去配置别名麻烦我们可以使用 package 来给该包下所有的实体类配置别名typeAliases!--typeAlias typeorg.westos.domain.User aliasuser/typeAlias--!--这是该给包下所有的实体类配置了别名--package nameorg.westos.domain/package/typeAliases说明给某个包下所有的实体类配置了别名这个别名叫啥可以是 原来的类名 可以是原来的类名全部小写或全部大写 例如User或 user 或 USER 这三个 都是别名 用哪个都行
使用package标签扫描该包下所有接口
如果一个包下的接口太多一个一个去扫描麻烦那么可以使用 package标签 扫描该包下所有的接口
mappers!-- mapper resourceorg/westos/dao/IUserDao.xml/mapper--!--扫描该包下所有的dao接口--package nameorg.westos.dao/package/mappers