hibernate级联操作

1
2
3
4
5
6
7
8
9
<many-to-one name="category" class="Category" cascade="save-update">
<!-- 映射的字段 -->
<column name="categoryId"/>
</many-to-one>
cascade
none;//默认
save-update;
delete;
all;

Hibernate关系映射

多对一单向映射 –> hibernate=-4

1
2
3
4
 <many-to-onename="category"class="com.yuan.hibernate.Category"fetch="join">
<columnname="CATEGORYID"/>
</many-to-one>
privateCategorycategory;

多对一双向映射 –> hibernate-5

1
2
3
<many-to-onename="category"class="com.yuan.hibernate.Category"fetch="join">
<columnname="CATEGORY"/>
</many-to-one>

1
2
3
4
5
6
7
  <setname="book"table="BOOK"inverse="false"lazy="true">
<key>
<columnname="ID"/>
</key>
<one-to-manyclass="com.yuan.hibernate.Book"/>
</set>
privateSet<Book>book;

一对一主键关系映射 –> hibernate-6

1
2
3
4
<one-to-onename="user"class="com.yuan.model.User"></one-to-one>
<one-to-onename="idCard"class="com.yuan.model.IdCard"></one-to-one>
privateUseruser;
privateIdCardidCard;

一对一主键外键关系映射 – > hibernate-7

1
2
<many-to-onename="idCard"update="true"/>
privateIdCardidCard;

多对多关系映射 – > hibernate-8

1
2
3
4
5
6
7
<setname="students"table="STUDENT_COURSE"inverse="false"lazy="true">
<key>
<columnname="COURSEID"/>
</key>
<many-to-manyclass="com.yuan.model.Student"column="STUDENTID"/>
</set>
```







privateSetstudents;
privateSetcourses;
```

HibernateUtil.save

1
2
3
4
5
6
7
8
9
10
11
12
Sessionsession=null;
try{
session=HibernateUtil.getSession();
session.beginTransaction();
session.save(customer);
session.getTransaction().commit();
}catch(Exceptione){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtil.closeSession();
}

HibernateUtil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.yuan.hibernate;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static SessionFactory sessionFactory = null; // SessionFactory对象
// 静态块
static {
try {
Configuration cfg = new Configuration().configure(); // 加载Hibernate配置文件
sessionFactory = cfg
.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties())
.buildServiceRegistry());
} catch (Exception e) {
System.err.println("创建会话工厂失败");
e.printStackTrace();
}
}

/**
* 获取Session
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}

/**
* 重建会话工厂
*/
public static void rebuildSessionFactory() {
try {
Configuration cfg = new Configuration().configure(); // 加载Hibernate配置文件
sessionFactory = cfg
.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties())
.buildServiceRegistry());
} catch (Exception e) {
System.err.println("创建会话工厂失败");
e.printStackTrace();
}
}

/**
* 获取SessionFactory对象
*
* @return SessionFactory对象
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}

/**
* 关闭Session
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close(); // 关闭Session
}
}
}

eclipse注释和注释模板

注释 
注释类型

1
2
// 单行注释
String type = "单行注释";

1
2
3
4
/* 
* 多行注释
*/
String type = "多行注释";
1
2
3
/**
* 文档注释
*/publicclass Dummy{}

快捷键

添加/取消单行注释: Ctrl+/

添加类的文档注释: Ctrl+Shift+j

注释模板                               

作用:定义文件、类和方法等默认的注释格式,减少手工输入的工作量。

设置注释模板的入口:点击 Window->Preference->Java->Code Style->Code Template ,然后展开 Comments节点 。

Comments节点 下的元素介绍:

  1. File节点(文件注释标签)
1
2
3
4
5
6
7
8
/**   
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}(用一句话描述该文件做什么)
* @author fsjohnhuang
* @date ${date} ${time}
* @version V1.0
*/
  1. Types节点(类注释标签)
1
2
3
4
5
6
7
8
/** 
* @ClassName: ${type_name}
* @Description: ${todo}(这里用一句话描述这个类的作用)
* @author fsjohnhuang
* @date ${date} ${time}
*
* ${tags}
*/
  1. Fields节点(字段注释标签)
1
2
3
/** 
* @Fields ${field} : ${todo}(用一句话描述这个变量表示什么)
*/
  1. Constructor节点(构造函数注释标签)
1
2
3
4
5
/** 
* <p>Title: </p>
* <p>Description: </p>
* ${tags}
*/
  1. Method节点(方法注释标签)
1
2
3
4
5
6
7
/** 
* @Title: ${enclosing_method}
* @Description: ${todo}(这里用一句话描述这个方法的作用)
* @param ${tags} 参数说明
* @return ${return_type} 返回类型
* @throws
*/
  1. Overriding Methods节点(覆盖方法注释标签)
1
2
3
4
5
6
/*
* Title: ${enclosing_method}
*Description:
* ${tags}
* ${see_to_overridden}
*/
  1. Delegate Methods节点(代理方法注释标签)
1
2
3
4
/** 
* ${tags}
* ${see_to_target}
*/
  1. getter节点(getter方法注释标签)
1
2
3
/** 
* @return ${bare_field_name}
*/
  1. setter节点(setter方法注释标签)
1
2
3
/** 
* @param ${param} 要设置的 ${bare_field_name}
*/

导入、导出注释模板

在 Window->Preference->Java->Code Style->Code Template 下可导入导出注释模板。

archlinux安装2016.12.08

自己整理的ArchLinux安装用到的命令

  • 网络配置

    • 手动指定:

      1
      2
      3
      ip link set enp1s0 up
      ip addr add 192.168.1.2/24 dev enp1s0
      ip route add default via 192.168.1.1
    • 设置DNS
      nano /etc/resolv.conf

  • 更新系统时间
    timedatectl set-ntp true

  • 分区
    cfdisk
  • 格式化分区

    1
    2
    3
    对于普通分区:mkfs.ext4 /dev/sdXY
    对于swap分区:mkswap /dev/sdXS
    对于EFI分区:mkfs.vfat -F32 /dev/sdXE
  • 挂载分区

    1
    2
    3
    4
    挂载/分区:mount /dev/sdXR /mnt
    挂载EFI分区:mkdir -p /mnt/boot;mount /dev/sdXE /mnt/boot
    挂载home分区:mkdir -p /mnt/home;mount /dev/sdXH /mnt/home
    激活swap分区:swapon /dev/sdXS
  • 选择镜像
    编辑 /etc/pacman.d/mirrorlist,选择您的首选 mirror. 这个 mirror 列表也将通过 pacstrap 被复制并保存在到系统中,所以请确保设置正确。

  • 安装基本系统
    pacstrap -i /mnt base base-devel
  • 生成分区信息
    genfstab -U -p /mnt > /mnt/etc/fstab
  • chroot进新系统
    arch-chroot /mnt /bin/bash
  • Locale
    本地化的程序与库若要本地化文本,都依赖 Locale, 后者明确规定地域、货币、时区日期的格式、字符排列方式和其他本地化标准等等。/etc/locale.gen是一个仅包含注释文档的文本文件,要指定您需要的本地化类型,只需移除对应行前面的注释符号(#)即可:
    1
    2
    3
    4
    nano /etc/locale.gen
    en_US.UTF-8 UTF-8
    zh_CN.UTF-8 UTF-8
    zh_TW.UTF-8 UTF-8

接着执行locale-gen以生成locale讯息:
locale-gen
创建 locale.conf 并提交您的本地化选项:
echo LANG=en_US.UTF-8 > /etc/locale.conf

  • 设置时间

    1
    2
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    hwclock --systohc --utc
  • 主机名
    要设置 hostname,将其添加 到 /etc/hostname, myhostname 是需要的主机名:
    echo myhostname > /etc/hostname
    建议添加对应的信息到hosts:

    1
    2
    3
    4
    /etc/hosts
    127.0.0.1 localhost.localdomain localhost
    ::1 localhost.localdomain localhost
    127.0.1.1 myhostname.localdomain myhostname
  • Initramfs
    如果修改了 mkinitcpio.conf,用以下命令创建一个初始 RAM disk:
    mkinitcpio -p linux

  • Root 密码
    passwd
  • 安装引导程序
    bootctl --path=/boot update

    1
    2
    3
    4
    5
    nano /boot/loader/entries/arch.conf
    title Arch Linux
    linux /vmlinuz-linux
    initrd /initramfs-linux.img
    options root=/dev/sda2 rw
  • 退出chroot
    exit


  • 添加用户
    首先添加一个用户,并把它加到wheel组:useradd -m -G wheel -s /bin/bash [用户名]
    然后为这个用户设置密码:passwd [用户名]
    最后设置wheel组的用户能用sudo获取root权限,使用visudo来修改sudo的配置:visudo
    找到这样的一行,把前面的#去掉,然后按ESC键,输入:x!回车就可以保存并退出:#%wheel ALL=(ALL) ALL

  • bash-completion
    这个软件能够增强bash的Tab自动补全功能,方便我们输入命令:sudo pacman -S bash-completion

  • 添加archlinuxcn源
    archlinuxcn是一个由arch中文社区维护的镜像源,其中包含了许多官方镜像中没有但又经常使用的软件。可以通过编辑pacman.conf文件来添加archlinuxcn源:sudo nano /etc/pacman.conf
    在文档结尾处加入下面的文字:

    1
    2
    3
    [archlinuxcn]
    SigLevel = Optional TrustAll
    Server = http://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

完成之后刷新pacman数据库
sudo pacman -Syy
安装archlinuxcn-keyring,这个是提供校验软件包的密钥的。
sudo pacman -S archlinuxcn-keyring
现在archlinuxcn源就可以使用了。

  • .安装yaourt
    yaourt相当于一个加强版的pacman,在pacman的基础上添加了对AUR的支持,并提供诸如彩色输出、交互式搜索模式等一系列实用功能。
    yaourt包含在archlinuxcn源中,所以我们直接用pacman安装即可:
    sudo pacman -S yaourt
    至于yaourt的好处以后就可以体验到了。
  • 安装图形界面
    首先安装xorg-server,这是图形界面的基础。sudo pacman -S xorg-server
    然后安装对应的驱动程序:sudo pacman -S xf86-video-intel xf86-video-ati
    安装Kde桌面:sudo pacman -S plasma kdebase sddm
    删除媒体中心:sudo pacman -R plasma-mediacenter
    为了让我们开机时能够进入图形界面,还需要把显示管理器ssdm设置为开机启动。
    sudo systemctl enable sddm
  • 安装中文字体
    sudo pacman -S adobe-source-han-sans-cn-fonts adobe-source-han-sans-tw-fonts wqy-zenhei wqy-microhei ttf-freefont