crm开发总结02

1、eclipse当中配置环境变量classpath:
.classpath 文件

2、mybatis的配置文件名称随意:
不一定是:mybatis-config.xml
不一定是:SqlMapper.xml
这些文件的名字都是可以配置的。
但有要求,这些配置文件需要放到类路径下。

什么是类路径?bin目录。
	在eclipse当中,和src同级目录下有一个bin目录,
	bin目录下存放的是class文件,实际上bin目录才是
	类的根路径。




//多个路径url-pattern用,给字符串分隔/  ?/不能省掉

3、在mybatis当中编写xml文件的时候,没有提示,怎么办?
任何一个xml文件都会关联一个dtd文件,dtd文件是约束文件,
约束xml文件中可以出现的标签,以及标签的顺序等,所以只有
关联了dtd文件之后,xml编写的时候才会有提示。

当计算机连接网络的时候,编写xml文件会自动有提示,但是没有
网络的时候没有提示,怎么办?可以将本地的dtd文件和xml文件
产生关联。

步骤:
	复制:-//mybatis.org//DTD Config 3.0//EN
	window --> Prefrences --> 输入 xml catalog --> User ... --> add..

4、mybatis的核心配置文件中一般不建议直接配置连接数据库的信息,建议将连接数据库的信息独立的配置
到一个简单的属性文件当中(key=value),然后在mybatis的核心配置文件当中引入该属性配置文件。
步骤:
在src根目录下/bin根目录下,新建一个jdbc.properties文件
在该文件中提供配置:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/wkcto
jdbc.user=root
jdbc.password=root
将该属性配置文件的位置告诉mybatis:

在mybatis当中使用属性配置文件:
${jdbc.driver}

注意:
${jdbc.driver} 并不是EL表达式,EL表达式是JSP中的语法。
${jdbc.driver} 是mybatis自己定制的。

5、parameterType可以是简单类型,简单类型的时候,parameterType可以省略。
parameterType可以是javabean,当是javabean的时候,#{这里一定要写javabean的属性名}
parameterType可以是Map,当是Map的时候,#{这里一定要写Map集合中的key}

什么时候parameterType会使用Map呢?
	parameterType最主要的作用是什么:给sql语句的占位符传值。
	有没有这种情况:sql语句的占位符来自多张表!!!!
	使用Map的前提是没有合适JavaBean。
	sql语句:找出在“达拉斯”工作的员工,并且该员工的编号为“7369”?
		emp 员工表 e
		empno	ename .... deptno
		------------------------------
		7369	.....		100
		
		public class Emp{
			empno
			ename
			...
			deptno
		}
		
		dept 部门表 d
		deptno	dname	loc
		--------------------------
		100		研发部	达拉斯
		
		public class Dept{
			deptno
			dname
			loc
		}
	
	<select parameterType="Map">   <!--map.put("a" , "达拉斯"); map.put("b" , "7369");-->
		select
			e.*
		from
			emp e
		join
			dept d
		on
			e.deptno = d.deptno
		where
			d.dname = #{a}
		and
			e.empno = #{b};
	</select>

6、对于查询结果集的处理来说,完全依靠:select标签中的resultType,resultType属性用来指定结果集的类型,
注意:在mybatis当中,结果集的类型可以是简单类型,可以是javabean,也可以是Map,什么时候使用Map?
没有合适的javabean的时候,例如多张表连接查询,取出多张表当中的字段,没有合适的javabean,此时可以选择使用Map
当然,要注意:即使resultType是简单类型,也不能省略。这是和parameterType有很大区别的地方。

查询结果集放到Map集合的时候,谁来作为Map集合的key?
	查询结果集的列名作为Map集合的key。

7、mybatis执行的sql语句怎么输出到控制台呢?
可以借助一个第三方的组件<日志组件>:
log4j

我们这里不研究log4j,只是用一下。
	怎么用?
		第一步:引入log4j的jar : log4j-1.2.17.jar
		第二步:引入log4j的配置文件
			在类的根路径下,新建log4j.properties
		第三步:在配置文件中编写mybatis日志配置信息。
			在该文件中添加以下配置:
				log4j.rootLogger=DEBUG,Console
				log4j.appender.Console=org.apache.log4j.ConsoleAppender
				log4j.appender.Console.layout=org.apache.log4j.PatternLayout
				log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
				log4j.logger.org.apache=INFO

注意:
	log4j是一个java语言平台通用的日志组件,可以使用在
	各大框架当中,不只是可以用在mybatis里面。
******************
主要目标:
在web项目当中使用mybatis

1、创建一个web project,我这里使用的servlet版本号是servlet 3.1,
在servlet 3.0版本之后,web.xml文件就可以不写了,所有的配置均采用注解
来完成。

2、eclipse部署项目的时候,关于项目的名称:
settings目录下的:org.eclipse.wst.common.component
<?xml version="1.0" encoding="UTF-8"?>






3、关于mybatis核心对象的生命周期:
SqlSessionFactoryBuilder:
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
String resource = “org/mybatis/example/mybatis-config.xml”;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory
	SqlSessionFactory 一旦被创建就应该在应用的运行期间“一直存在”,没有“任何理由”对它进行清除或重建。
	SqlSessionFactory在整个容器当中只允许出现一个。
	
	一个SqlSessionFactory对象,代表了一个数据库,当多数据库开发的时候,SqlSessionFactory对象才会实例化多个。
	对于单一数据库来说,只能有一个。
	
SqlSession
	每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,
	所以它的最佳的作用域是请求或方法作用域。

原则:
	一个线程一个Connection。 (JDBC)
	一个线程一个SqlSession。(MyBatis)

2、步骤:
2.1、 导入相关jar
log4j-1.2.17.jar
mybatis-3.4.5.jar
mysql-connector-java-5.1.23-bin.jar
2.2、 引入相关配置文件
jdbc.properties
log4j.properties
mybatis-config.xml
SqlMapper.xml
2.3、数据库表我们就直接使用tbl_student了。
tbl_student
id name birth
-------------------------------
1 zhangsan 1980-11-11

id采用UUID。
2.4、准备一个UUID的工具类。

package com.wkcto.mybatis.utils;
import java.util.UUID;
public class UUIDGenerator {
private UUIDGenerator(){

     }
     public static String generate(){

    	 return UUID.randomUUID().toString().replace("-", "");
    	 
     }

}

2.5、提供一个mybatis的工具类:SqlSessionUtil
	SqlSession需要放到ThreadLocal当中,必须保证一个线程一个SqlSession对象。
2.6、动态代理(JDK动态代理,实现事务的自动管理。)
	事务在service层控制,所以以后我们不能直接调用service,
	需要先创建一个service对象的代理对象,通过代理对象执行service
	当中的方法。
2.7、准备前端页面
	save.jsp
	准备form表单
2.8、web.xml文件的编写,但是我们项目中没有web.xml文件。使用注解。
2.9、新建MVC所需要的package
	domain
	controller
	service.impl
	dao.impl
	
2.10、提供StudentController、StudentService、StudentDao

2.11、SqlMapper.xml文件一般和dao接口放一块,并且该xml文件的名称一般和dao接口名称一致。
不是必须的,只是开发规范。

2.12、在mybatis核心文件中配置SqlMapper.xml文件的路径。
	<mappers>
		<mapper resource="com/wkcto/crm/dao/StudentDao.xml"/>
	</mappers>

2.13、在sqlmapper.xml文件中,编写sql语句:
	<insert id="saveStu" parameterType="com.wkcto.crm.domain.Student">
		insert into tbl_student
			(id,name,birth)
		values
			(#{id},#{name},#{birth})
	</insert>

<!-- 别名 -->
<typeAliases>
	<typeAlias type="com.wkcto.crm.domain.Student" alias="Student"/>
</typeAliases>

猜你喜欢

转载自blog.csdn.net/qq_30347133/article/details/84070933
CRM