1.三层架构包括:1.界面层接收用户数据,显示请求处理结果;2.业务逻辑层:接收传递过来数据,处理业务逻辑,调用数据访问层获取数据;3:与数据库打交道
2.框架就是整个或部分系统的可重用组件
3.Mybatis框架是基于java的一个持久层框架,内部封装jdbc,开发者只需要关注sql语句,不需要关注加载驱动,创建连接,statement,关闭资源等,通过xml或注解进行sql配置,通过java对象和sql的动态参数进行映射最终需要执行的sql语句,最终由mybatis框架执行映射java对象返回。
4.创建maven工程,引入mybatis和mysql依赖,如果配置文件放在java目录下需在pom中配置
<build> <resources> <resource> <directory>src/main/java</directory><!--所在的目录--> <includes><!--包括目录下的.properties,.xml 文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>,1.创建一个StudentDao接口,一个查询方法int deleteById();2.编写Dao接口的映射文件StudentDao.xml,namespace="接口的全限定包名加接口",对应增删改查方法,id为接口中的方法名,参数和返回类型,java内置的数据类型可以用小写名称,写sql语句例如delete from student where id=#{};3.在resources下创建mybatis.xml主配置文件 <settings>//配置日志 <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <typeAliases>//配置别名package批量配置 <typeAlias type="com.bjpowernode.pojo.Student" alias="student"/> </typeAliases> <environments default="mysql">//配置数据库环境可以指定多个,default哪个id生效 <environment id="mysql">//别名 <transactionManager type="JDBC"></transactionManager>//事务 <dataSource type="POOLED">//POOLED数据源为连接池 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers>//指定映射文件 <mapper resource="dao/StudentDao.xml"/> </mappers>4.在主方法中创建mybatis核心类SqlSessionFactory对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); InputStream is = App.class.getClassLoader().getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = builder.build(is); SqlSession session = factory.openSession(true);//获取数据库连接 session.delete("dao.StudentDao.deleteById",8);//执行操作 session.close();
5.mybatis的动态代理session.getMapper(StudentDao.class);传入一个接口类对象,动态代理生成实现类,底层代码会用Switch方法对比调用增删改查的方法,传入参数,不需要手动写实现类
6.输入参数,1.简单参数2.多个参数接口参数前加Param("id")或者在xml中写where id=#{arg0} 3.使用自定义对象和Map集合区别,多次出现建议封装对象
7,#和$区别,前者使用prepareStatement占位符方式赋值,后者字符串拼接,例如select * from student where ${colName} = #{cloValue}
8.返回值resultMap映射id:指定一个不重复的的值,type:查询结果用什么类型对象封装全限定名称,property:类中属性名,column:数据库字段名称;javaType和jdbcType可以不写,自动猜测,属性名和字段名一致可以不写,resultMap和resultType不能同时写
9,实体符号>><<>=(≷=);<=(<=);xml转为实体符号负责会出错
10,模糊查询Sql:where name like "%" #{name} "%"
11,动态Sql:1.if和where标签区别,if标签需要在Sql语句后面添加where 1=1;2.foreach标签主要对集合数据的遍历,collection="写数据类型,而不是属性名",open="(开始符号",close=“结束符号)",item="数据中的成员",separator="元素之间的分隔符,"
12,Sql片段,可以在mapper文件中将代码封装,使用<include>标签引用
13,properties文件在mybatis.xml的第一行配置,数据源属性直接用${driver},映射可以用resources或者package指定包名
14,分页助手,在pom文件加入pagehelper依赖,在xml中加入插件,类中PageHelper.stertPage(1,3)
15,mybatis缓存,一级缓存sqlsession级别,默认,二级sqlSessionFactory级别全局,不需要开启,使用在mapper映射文件加<cache/>标签,将查询的数据放入全局缓存,频繁修改数据库,不建议使用mybatis
16,连表查询1:多对一例如emp里有一个dept,多个员工对应一个部门,查询结果封装为resultMap,emp中的Dept属性用<association property="实体类的属性名" javaType="dept">标签,2:一对多dept中有emp用<collection property="属性名" ofType="emp">
17,mybatis中的注解,@test是junit测试只有在test目录下使用,@BeforeClass@AfterClass在所有测试方法执行前后执行,@Befor@Alfter在测试方法执行前后,@Select@Insert@Delete@Update直接在注解中写Sql语句,不需要mapper文件,在mybatis.xml中mapper标签使用class属性指定类,因为没有映射文件所以不用resources