大三寒假实训


第一天实现mybatis手动写实现类 以及几层框架
AppTest.java
int empno=1
Emp emp = sqlSession.selectOne(“selectOne”,empno);
sout(emp);
public void testInit(){
SqlSessionFactory
return sqlSession;
return
}
public interface EmpDao{
tmp selectOne(int id){
return null;
}
public void updateEmp(Emp emp){
return sessionFactory.openSession();
InputSteam resourceAsStream resourceAsSream = Resources.getResourceAsStream(“mybatis-config.xml”)
}
public void delEmp(int id){

}
public static SqlSessionFactory sess
}

insert into t_emp(e_name,job,hiredate,deptno,sal) values(#{ename},#{job},#{hiredate}),#{hiredate}


delete from where =

return MybatisUtil.getSession
EmpDao empDap = new EmpDaoImpl();
tmp emp = new Emp();
emp.setSal(5000);
emp.setJob(“全栈工程师”)
emp.setEname("")
empDao.insertEmp();
先查询,再修改

12-13
实现类接口
dao层只有接口,在dao层实现方法
mapper文件的名字必须和dao层接口名字保持一致
mapper.xml 中的namespace属性一定和dao接口全类名保持一致
xml中的ID名字必须和dao层接口中的方法名保持一致
接口中的参数类型必须和xml中的参数parameterType保持一致
全都配置好可以直接实现,不用写实现类
问题classNotFound //起别名


//批量配置的方法
该包下的所有类,都自动配置别名

//该包下的所有类都自动配置别名
别名名字是该类的名字


//xml文件也可以这样配置,只不过xml文件要求mapper接口存放的路径和mapper.xml
存放的路径保持一致 mapper接口在哪放着,xml文件也要放在哪
新建一个文件夹


数据库获取不到–获取列名与值一一对应
//–type:对应的就是java实体类 全类名或者是别名
–id 查询的主键
//标准写法






//先实现功能再提高效率
你会花钱买一份简单的代码吗?肯定不会

2020-12-14
hibernate
获取ioc 容器
从IOC容器中获取指定的bean对象
获取的方式有两种参数类型,spring表示bean的ID属性。class该类对象所属的全类名

ApplicationContext
将对象放置到ioc 容器中进行管理
public helloworld(int a){}
public helloworld(){}
//如果通过class对象,该类只有一个
helloworld helloworld=(Helloworld) ioc.getBean(“com.xkp.beans.Helloworld”);
helloworld helloworld2=(helloworld) ioc.getBean(“hello”);
要么不写,要么写两个
public void testPerson(){
Person p = (Person) ioc.getBean(“person”);
sout(person);
}
//通过set方法进行属性赋值












//对多个不同的构造方法赋值 ,如果值不同,在value后制定value

public class Customer {
private String name;
private
}
//字面值使用value直接赋值,引用值使用rel赋值




//内部注入


注意:内部bean不能使用在任何其他地方

</>







</>

//直接定义全局变量
<util:list id=>


//注入另一种
<bean id = class= p:age=,p:name=,p:money=>
<bean id = class= p:age=,p:order-ref=“order”>
//自动注入
</>
</>
</>
autowire=“byType” //自动注入,有多个类型错误
autowire=“byName” //按照bean的ID注入,ID的名字哪个等于定义类里面的名字就将那个值赋值
读取properties文件

p:name=" p h o n e . n a m e " p : c o l o r = " {phone.name}" p:color=" phone.name"p:color="{hone.color}"
public class JDBCUtil{
private string jdbc;
}


oublic void testData(){
jdbcUtil dataSource = (JdbcUtil)
}

AOP

spring-aop
spring-beans
spring-core
spring-context
spring-expression
spring-aspects
spring-tx

dao–UserDao --interface
public interface userdao{
public void addUser(User user);
publicvoid delUser(int id);
public void uodateUser(User user){}
public void getUserById(User user){}
public List<> queryUser()
}
entity-------get set 方法
serviceprivate UserDao ud=new UserDaoImpl();
服务层创建dao层对象
public void addUser(User user){
UserDao.delUser(id);
}
controller
USerController{
private UserService us=new UserServiceImpl();
void addUser(Useruser){
userService.addUser();
}
}
controller依赖service层,service层依赖doa层

Apptest{
usercontroller uc= new UserCOntrolle();
Usercontroller.addUser(new User());
UserController.delUser(1);
}

记录时间sout(new Date());
创建线程 继承thread类
一定要和被代理类实现同一个接口
依赖被代理类的接口
public class UserProxy implements UserDao{
private UserDao userDao;
public UserProxy(UserDao userDao){
this.userDao=userDao;
}
public void addUser(User user){
sout(“代理类方法前”);
UserDao.addUser(user);
sout(“方法后”);
}
public User getUserByID(int id){
sout(“前”);
try{
return UserDao.queryAll() ;}
catch(Exception e)
{return null;}
finally(sout(代理后))
}
不能两个人写一个类,使用这种方法
版本控制工具–查看谁提交的代码
stuDaoImpl(){

}
test----testStu //测试stu的controller
stuController stuCOntroller= new stuCOntroller();
sc.add(new Stu());
sc.delStu(1);
sc.updateStu(new stu());
//如果有多个实体类就要多个代理类,这样会不好维护。
AOP
oublic tsetStu(){
application ac = new classPAthApplicationContext(app.xml);
StuCOntroller sc=(Stucontroller) ac.getBean(stuController);
sc.del(1);
}






UserController userController
写日志类 记录日志
Mylogger{
public void abc(){
sout(“记录一个日志信息”)
}
}

aop:Config
<aop:aspect ref=“myLogger”>
<aop:before method=“abc” pointcut-ref=“exp”></aop:before>
<aop:after method=“afterMethod” pointcut-ref>
<aop:after-throwing method=“exceptionMethod” pointcut-ref=“exp”> //抛出异常
</aop:aspect>
//pointcut也可以写在外面
<aop:pointcut id=“exp” expression=“execution(* com.xkp.dao.UserDaoImpl.*(…))”/>
//表示引用类里面所有的方法
//aop:before 之前,after之后
aop:aspect
public void afterMethod(){
//后置通知
sout(“执行方法之后,执行该代码”)

}
public void exceptionMethod(Exception ex){
sout(“这个是出现异常记录的方法,异常的名字为”+ex.getMessage());
}
aop:config>

public void abc(jointPoint jointPoint){
Stirng methodName = joinPoint.getSignature().getName();
}
@Controller
@Service
@Repository --DAO层
application.xml配置一个saomiaoqi
<context:comnent-scan base-package=“com.xkp”></context:component-scan>
@AUtowried 、//bytype
@resource //byname 如果名字找不到继续使用bytype
使用resource不用使用get set方法
@Comment
//自定义日志记录类。切面类
@Aspect @Before(“execution(* com.xkp.service.impl.(…)”) //(…)表示括号有没参数都行
//开启aop注解(开启自动代理)
aop:aspectj-sutoproxy
@after(“execution(* com.xkp.service.Impl.(…))”)
@AfterThrowing(vslue=“execution(*com.xkp.service.Impl.(…))”)
@Before(“abd”) //方法名称
void exp2(){

}
@pointcut指明切面表达式切到哪


SPRING-AOP
tomcat 启动时执行代码 load-on-startup
一个请求对应一个servlet
后加/ 处理所有的请求
controller c控制器
entity service dao m模型
视图 v
servlet该视图可能需要全换
spring不用全换 只用换视图就行了
spring web mvc 最关键的是前端控制器
spring返回model and view
dispatcherServlet(不需要) handlerMapping(不需要) handler(需要)即controller hadnlerAdapter(不需要)
viewReslover(不需要) view(jsp.freemaker.pdf)
只需要自己写controller (handler)
写项目中遇到了那些问题
一家公司可能只用几种固定的技术

sqlSesionFactory org.mybatis.spring.SqlSessionFactory
datasurce dataSource
applicationContet.xml文件下
configLOcation classpath:mybatis/mybatis/mybatis-config.xml
property name=“cacheAliasesPackage”
加载所有xml文件
mappperLocations classpath:mybatis/mapper/*.xml
动态代理所有dao层实现类
org.mybatis.spring.mapper.MapperScannerConfigurer
//扫描dao层所有接口
name :basePackage value"com.xkp.ssm.dao"
sqlSession.getmapper传接口创建实现类
因此在这里要注入SQLSessionFactory
name:sqlSessionFactoryBeanName sqlSessionfactory
spring容器包括springmvc子容器
注解驱动
mvc:annotation-driven
视图解析器 bean class=“org.springframework.web.servlet.view.InternalResourceViewResolver”
property name=“prefix” value=/jsp/
suffix .jsp
public class DateConvert implements Converter(String,Date){
@Override
public Date convert(String s){
SimpleDateFormat
}

}
emp{empno,empae,job,hiredate,sal}
free mabitis
easycode进行代码生成 与mybatis相关
private TEmpService tEmpService
public String queryAl(MOdel model,@RequestPram(defaultValue=“1” int page,@RequestParam(defaultValue=“5”) int)){
int page=1;
int pageSize=5;
model.addAttribute(“list”,tEmpService.queryAllByLimit(page,pageSize));
}

编号,姓名,职业,日期,工资,部门编号,操作

@requestMapping(“del”)
public String delEmp(int id){
tEmpService.deleteById(id);
return “redirect:list”;
}

<>a calss=“btn btn=lg btn=primary div class=“post” class=“form-control””


Ldap 默认使用端口389
RDB是一定时间取存储文件
AOF是默认每秒去存储历史命令
redis默认使用RDB
客户端使用 Zookeeper 时会连接到集群中的任意节点,所有的节点都能够直接对外提供读操作,
但是写操作都会被从节点(非Leader服务器)路由到主节点(Leader 服务器),由主节点进行处理
NameNode存在单点问题:checkpoint(在每次 checkpoint的时候secondarynamenode才会合并并同步namenode的数据)
的问题,secondarynamenode的备份数据并不能时刻保持与namenode同步,
也就是说在namenode宕机的时候secondarynamenode可能会丢失一段时间的数据,
Spark的常驻进程:JobHistory,JDBCServer
HBase读数据时需要读取 HFile MemStore
HBase中Compaction的目的是减少同一个Region,同一个ColumnFamily下的文件数目
桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作
Channel不是DataStream的组成部件
Flume支持多级级联的sink类型是avro sink
延时性不是ZooKeeper的关键特性

val fromTopic = “t1”
val brokers=“node01:092,node02:9092,node03:9092”
val KafkaParams=MapString,Object{
val fromTopic=“t1”
val brokers=“node01:9092,node02:9092,node03:9092”
val kafkaParams=Map[String,Object](
ConsumerConfig.BOOTSTRAP+SERVERS_CONFIG->brokers,
ConsumerCOnfig.KEY_DESERIALIZER_CLASS_CONFIG->classOf
COnsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG->class
ConsumerConfig.GROUP_ID_CONFIG->“streamingKafka”,
ConsumerConfig.AUTO_OFFSER_RESET_CONFIG->“latest”
)
val dStream = KafkaUtils.createDirectStream(
ssc,
LocationStragies.PreferConsistent,
ConsumerStragies.SubcribeString,String
)
val result=dStream.map(x=>x.value+"------hahaha")
}
private static KafkaProducer<String,String> createProducer(){
Properties props = new Properties();
props.put(“bootStrap.servers”,“node01:9092,node02:9092,node03:9092”);
props.put(“acks”,“all”);
props.put(“batch.size”,16384);
props.put(“linger.ms”,1);
return new KafkaProducer<String,String>(props);

}
public static void createAdmin(String servers){
Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,servers);
amdin=AdminClient.create(props);
private static void createAdmin(){
createAdmin(“node01:9092,node02:9092,node03:9092”);
}
public static void sendMessage(String topic,String jsonMessage){
KafkaProducer<String.String> producer = createProducer();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值